rtsp: Don't use invalid sockets
authorOgnyan Tonchev <ognyan@axis.com>
Thu, 25 Oct 2012 07:19:21 +0000 (09:19 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 25 Oct 2012 15:59:47 +0000 (17:59 +0200)
return false from dispatch () if the read and write sockets have been
unset in tunnel_complete ()

Setting up HTTP tunnels causes segfaults since the watch for the second
connection is not destroyed anymore in tunnel_complete () and the connection
will still be used even though it is not valid anymore.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686276

gst-libs/gst/rtsp/gstrtspconnection.c

index 4d5f133..589079b 100644 (file)
@@ -2971,8 +2971,13 @@ gst_rtsp_source_dispatch (GSource * source, GSourceFunc callback G_GNUC_UNUSED,
 
             /* in the callback the connection should be tunneled with the
              * GET connection */
-            if (watch->funcs.tunnel_complete)
+            if (watch->funcs.tunnel_complete) {
               watch->funcs.tunnel_complete (watch, watch->user_data);
+              keep_running = !(watch->conn->read_socket == NULL &&
+                  watch->conn->write_socket == NULL);
+              if (!keep_running)
+                goto done;
+            }
             goto read_done;
           }
         }
@@ -3056,6 +3061,7 @@ gst_rtsp_source_dispatch (GSource * source, GSourceFunc callback G_GNUC_UNUSED,
     g_mutex_unlock (&watch->mutex);
   }
 
+done:
 write_blocked:
   return keep_running;