From 318b3a1df4803933aed6a2872b3fe35578381a74 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 12 Jan 2011 15:36:22 +0100 Subject: [PATCH] server: use signal to keep track of clients Keep track of all the clients that the server creates and remove them when they fire the 'closed' signal. --- gst/rtsp-server/rtsp-server.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/gst/rtsp-server/rtsp-server.c b/gst/rtsp-server/rtsp-server.c index b51569a97d..0d5dc57200 100644 --- a/gst/rtsp-server/rtsp-server.c +++ b/gst/rtsp-server/rtsp-server.c @@ -623,16 +623,30 @@ close_error: } } +static void +unmanage_client (GstRTSPClient * client, GstRTSPServer * server) +{ + GST_DEBUG_OBJECT (server, "unmanage client %p", client); + + g_mutex_lock (server->lock); + server->clients = g_list_remove (server->clients, client); + g_mutex_unlock (server->lock); + + g_object_unref (client); +} + /* add the client to the active list of clients, takes ownership of * the client */ static void manage_client (GstRTSPServer * server, GstRTSPClient * client) { + GST_DEBUG_OBJECT (server, "manage client %p", client); gst_rtsp_client_set_server (client, server); - /* can unref the client now, when the request is finished, it will be - * unreffed async. */ - gst_object_unref (client); + g_mutex_lock (server->lock); + g_signal_connect (client, "closed", (GCallback) unmanage_client, server); + server->clients = g_list_prepend (server->clients, client); + g_mutex_unlock (server->lock); } static GstRTSPClient *