From 2526a5604e36300de4936d3d9de75e5170fd855f Mon Sep 17 00:00:00 2001
From: trilene <trilene@runbox.com>
Date: Wed, 16 Sep 2020 07:29:26 -0400
Subject: [PATCH] Remove bus watch when call ends

---
 src/WebRTCSession.cpp | 4 +++-
 src/WebRTCSession.h   | 9 +++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/WebRTCSession.cpp b/src/WebRTCSession.cpp
index e9822f7d6..a3900b482 100644
--- a/src/WebRTCSession.cpp
+++ b/src/WebRTCSession.cpp
@@ -495,7 +495,7 @@ WebRTCSession::startPipeline(int opusPayloadType)
         }
 
         GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(pipe_));
-        gst_bus_add_watch(bus, newBusMessage, this);
+        busWatchId_ = gst_bus_add_watch(bus, newBusMessage, this);
         gst_object_unref(bus);
         emit stateChanged(State::INITIATED);
         return true;
@@ -601,6 +601,8 @@ WebRTCSession::end()
                 gst_element_set_state(pipe_, GST_STATE_NULL);
                 gst_object_unref(pipe_);
                 pipe_ = nullptr;
+                g_source_remove(busWatchId_);
+                busWatchId_ = 0;
         }
         webrtc_ = nullptr;
         if (state_ != State::DISCONNECTED)
diff --git a/src/WebRTCSession.h b/src/WebRTCSession.h
index 56d76fa83..8e78812f1 100644
--- a/src/WebRTCSession.h
+++ b/src/WebRTCSession.h
@@ -64,10 +64,11 @@ private slots:
 private:
         WebRTCSession();
 
-        bool initialised_   = false;
-        State state_        = State::DISCONNECTED;
-        GstElement *pipe_   = nullptr;
-        GstElement *webrtc_ = nullptr;
+        bool initialised_        = false;
+        State state_             = State::DISCONNECTED;
+        GstElement *pipe_        = nullptr;
+        GstElement *webrtc_      = nullptr;
+        unsigned int busWatchId_ = 0;
         std::string stunServer_;
         std::vector<std::string> turnServers_;
         GList *audioSources_  = nullptr;
-- 
GitLab