server: Emit client-connected signal earlier
authorJonas Holmberg <jonashg@axis.com>
Mon, 23 Sep 2013 12:28:04 +0000 (14:28 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Tue, 24 Sep 2013 15:36:07 +0000 (17:36 +0200)
Emit client-connected before the client ref is given to a GSource,
otherwise client-connected can be emitted after the client object has
been freed.

gst/rtsp-server/rtsp-server.c

index efc711b..d126ab2 100644 (file)
@@ -998,6 +998,9 @@ manage_client (GstRTSPServer * server, GstRTSPClient * client)
 
   GST_DEBUG_OBJECT (server, "manage client %p", client);
 
+  g_signal_emit (server, gst_rtsp_server_signals[SIGNAL_CLIENT_CONNECTED], 0,
+      client);
+
   cctx = g_slice_new0 (ClientContext);
   cctx->server = g_object_ref (server);
   cctx->client = client;
@@ -1089,9 +1092,6 @@ gst_rtsp_server_transfer_connection (GstRTSPServer * server, GSocket * socket,
   /* manage the client connection */
   manage_client (server, client);
 
-  g_signal_emit (server, gst_rtsp_server_signals[SIGNAL_CLIENT_CONNECTED], 0,
-      client);
-
   return TRUE;
 
   /* ERRORS */
@@ -1156,9 +1156,6 @@ gst_rtsp_server_io_func (GSocket * socket, GIOCondition condition,
 
     /* manage the client connection */
     manage_client (server, client);
-
-    g_signal_emit (server, gst_rtsp_server_signals[SIGNAL_CLIENT_CONNECTED], 0,
-        client);
   } else {
     GST_WARNING_OBJECT (server, "received unknown event %08x", condition);
   }