rtsp: Don't use invalid sockets

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
This commit is contained in:
Ognyan Tonchev 2012-10-25 09:19:21 +02:00 committed by Wim Taymans
parent 883dc41848
commit 6e5ea441e7

View 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;