]> www.infradead.org Git - pidgin-chime.git/commitdiff
Fix audiows leak on close
authorDavid Woodhouse <dwmw@amazon.co.uk>
Thu, 7 Dec 2017 00:56:37 +0000 (00:56 +0000)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Thu, 7 Dec 2017 00:56:37 +0000 (00:56 +0000)
chime-call-transport.c

index ec925155e58673f3f14cf76a9e265c2d083db4bf..59dde9f5473a2f8709c3c0d711baef91b7a9aa18 100644 (file)
@@ -184,12 +184,20 @@ void chime_call_transport_connect(ChimeCallAudio *audio, gboolean muted)
        g_free(origin);
 }
 
+static void on_final_audiows_close(SoupWebsocketConnection *ws, gpointer _unused)
+{
+       chime_debug("audio ws close\n");
+       g_object_unref(ws);
+}
+
+
 void chime_call_transport_disconnect(ChimeCallAudio *audio, gboolean hangup)
 {
        if (hangup)
                audio_send_hangup_packet(audio);
        soup_websocket_connection_close(audio->ws, 0, NULL);
        g_signal_handlers_disconnect_matched(G_OBJECT(audio->ws), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, audio);
+       g_signal_connect(G_OBJECT(audio->ws), "closed", G_CALLBACK(on_final_audiows_close), NULL);
        audio->ws = NULL;
 }
 
@@ -197,6 +205,9 @@ void chime_call_transport_disconnect(ChimeCallAudio *audio, gboolean hangup)
 
 void chime_call_transport_send_packet(ChimeCallAudio *audio, enum xrp_pkt_type type, const ProtobufCMessage *message)
 {
+       if (!audio->ws)
+               return;
+
        size_t len = protobuf_c_message_get_packed_size(message);
 
        len += sizeof(struct xrp_header);