From 150f0f517fc400e983a7cf8c6a12b1a3322dda3d Mon Sep 17 00:00:00 2001 From: Jonathon Jongsma Date: Fri, 20 Feb 2015 17:14:47 -0600 Subject: Free dispatchers at exit --- server/red-dispatcher.c | 7 +++++++ server/red-dispatcher.h | 1 + server/reds.c | 2 ++ 3 files changed, 10 insertions(+) diff --git a/server/red-dispatcher.c b/server/red-dispatcher.c index 44b13343..d8123399 100644 --- a/server/red-dispatcher.c +++ b/server/red-dispatcher.c @@ -861,6 +861,13 @@ void red_dispatcher_async_complete(struct RedDispatcher *dispatcher, free(async_command); } +void red_dispatcher_free(RedDispatcher *self) +{ + g_object_unref(self->dispatcher); + /* FIXME: free other stuff */ + free(self); +} + RedDispatcher *red_dispatcher_new(RedsState *reds, QXLInstance *qxl, int compression_level) { RedDispatcher *red_dispatcher; diff --git a/server/red-dispatcher.h b/server/red-dispatcher.h index 35b0ab88..5f8ec6d7 100644 --- a/server/red-dispatcher.h +++ b/server/red-dispatcher.h @@ -27,6 +27,7 @@ typedef struct RedChannelClient RedChannelClient; typedef struct AsyncCommand AsyncCommand; RedDispatcher *red_dispatcher_new(RedsState *reds, QXLInstance *qxl, int compression_level); +void red_dispatcher_free(RedDispatcher *self); void red_dispatcher_set_mm_time(RedDispatcher *dispatcher, uint32_t); void red_dispatcher_on_ic_change(RedDispatcher *dispatcher, spice_image_compression_t ic); diff --git a/server/reds.c b/server/reds.c index d6e1b212..4990dfec 100644 --- a/server/reds.c +++ b/server/reds.c @@ -2636,9 +2636,11 @@ static int reds_init_ssl(RedsState *reds) static void reds_destroy_internal(RedsState *reds) { g_array_unref(reds->renderers); + g_object_unref(reds->main_dispatcher); if (reds->main_channel) { main_channel_close(reds->main_channel); } + g_list_free_full(reds->dispatchers, (GDestroyNotify)red_dispatcher_free); #ifdef RED_STATISTICS shm_unlink(reds->stat_shm_name); free(reds->stat_shm_name); -- cgit