main-dispatcher: Remove watch leak

Watch was added but never removed.
The added basic_event_loop_destroy() addition allows to see that
this leak is gone).

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
This commit is contained in:
Frediano Ziglio 2017-03-01 17:07:17 +00:00
parent be4ceb4e24
commit cdd1e69b28
2 changed files with 17 additions and 4 deletions

View File

@ -55,6 +55,7 @@ struct MainDispatcherPrivate
{
SpiceCoreInterfaceInternal *core; /* weak */
RedsState *reds; /* weak */
SpiceWatch *watch;
};
@ -105,6 +106,7 @@ main_dispatcher_set_property(GObject *object,
}
static void main_dispatcher_constructed(GObject *object);
static void main_dispatcher_finalize(GObject *object);
static void
main_dispatcher_class_init(MainDispatcherClass *klass)
@ -114,6 +116,7 @@ main_dispatcher_class_init(MainDispatcherClass *klass)
g_type_class_add_private(klass, sizeof(MainDispatcherPrivate));
object_class->constructed = main_dispatcher_constructed;
object_class->finalize = main_dispatcher_finalize;
object_class->get_property = main_dispatcher_get_property;
object_class->set_property = main_dispatcher_set_property;
@ -304,10 +307,11 @@ void main_dispatcher_constructed(GObject *object)
G_OBJECT_CLASS(main_dispatcher_parent_class)->constructed(object);
dispatcher_set_opaque(DISPATCHER(self), self);
self->priv->core->watch_add(self->priv->core,
dispatcher_get_recv_fd(DISPATCHER(self)),
SPICE_WATCH_EVENT_READ, dispatcher_handle_read,
self);
self->priv->watch =
self->priv->core->watch_add(self->priv->core,
dispatcher_get_recv_fd(DISPATCHER(self)),
SPICE_WATCH_EVENT_READ, dispatcher_handle_read,
self);
dispatcher_register_handler(DISPATCHER(self), MAIN_DISPATCHER_CHANNEL_EVENT,
main_dispatcher_handle_channel_event,
sizeof(MainDispatcherChannelEventMessage), 0 /* no ack */);
@ -321,3 +325,11 @@ void main_dispatcher_constructed(GObject *object)
main_dispatcher_handle_client_disconnect,
sizeof(MainDispatcherClientDisconnectMessage), 0 /* no ack */);
}
static void main_dispatcher_finalize(GObject *object)
{
MainDispatcher *self = MAIN_DISPATCHER(object);
self->priv->core->watch_remove(self->priv->core, self->priv->watch);
self->priv->watch = NULL;
}

View File

@ -47,6 +47,7 @@ static void leaks(void)
g_assert_cmpint(result, ==, 0);
spice_server_destroy(server);
basic_event_loop_destroy();
}
int main(int argc, char *argv[])