Fix so emitting more HANGUP signals doesn't cause an assertion. cpw.maiku.media_refactor

Wed, 28 Oct 2009 17:58:59 +0000

author
Michael Ruprecht <maiku@pidgin.im>
date
Wed, 28 Oct 2009 17:58:59 +0000
branch
cpw.maiku.media_refactor
changeset 29614
35ca95d87e11
parent 29613
1f9726246a7c
child 29615
0aca2e93ae36

Fix so emitting more HANGUP signals doesn't cause an assertion.

libpurple/protocols/jabber/jingle/rtp.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/jabber/jingle/rtp.c	Wed Oct 28 17:15:43 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/rtp.c	Wed Oct 28 17:58:59 2009 +0000
@@ -468,13 +468,22 @@
 
 	g_return_if_fail(JINGLE_IS_SESSION(session));
 
-	if (type == PURPLE_MEDIA_INFO_HANGUP) {
+	if (type == PURPLE_MEDIA_INFO_HANGUP ||
+			type == PURPLE_MEDIA_INFO_REJECT) {
 		jabber_iq_send(jingle_session_terminate_packet(
-				session, "success"));
-		g_object_unref(session);
-	} else if (type == PURPLE_MEDIA_INFO_REJECT) {
-		jabber_iq_send(jingle_session_terminate_packet(
-				session, "decline"));
+				session, type == PURPLE_MEDIA_INFO_HANGUP ?
+				"success" : "decline"));
+
+		g_signal_handlers_disconnect_by_func(G_OBJECT(media),
+				G_CALLBACK(jingle_rtp_state_changed_cb),
+				session);
+		g_signal_handlers_disconnect_by_func(G_OBJECT(media),
+				G_CALLBACK(jingle_rtp_stream_info_cb),
+				session);
+		g_signal_handlers_disconnect_by_func(G_OBJECT(media),
+				G_CALLBACK(jingle_rtp_new_candidate_cb),
+				session);
+
 		g_object_unref(session);
 	} else if (type == PURPLE_MEDIA_INFO_ACCEPT &&
 			jingle_session_is_initiator(session) == FALSE) {

mercurial