Copied from upstream: https://hg.mozilla.org/releases/mozilla-esr38/raw-rev/9719b71d72dd # HG changeset patch # User Byron Campen [:bwc] # Date 1454100887 21600 # Node ID 9719b71d72dd2a3c5ee12ace156af2a63d9595ac # Parent b68673d974a10f65390f80b36d4307eb31e44669 Bug 1234578 - Assert if PCM is destroyed improperly. r=rjesup, a=sylvestre diff --git a/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.cpp b/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.cpp --- a/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.cpp +++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.cpp @@ -712,16 +712,18 @@ PeerConnectionMedia::SelfDestruct_m() { CSFLogDebug(logTag, "%s: ", __FUNCTION__); ASSERT_ON_THREAD(mMainThread); mLocalSourceStreams.Clear(); mRemoteSourceStreams.Clear(); + mMainThread = nullptr; + // Final self-destruct. this->Release(); } void PeerConnectionMedia::ShutdownMediaTransport_s() { ASSERT_ON_THREAD(mSTSThread); diff --git a/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.h b/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.h --- a/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.h +++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.h @@ -210,17 +210,20 @@ class RemoteSourceStreamInfo : public So std::vector mTrackIdMap; // True iff SetPullEnabled(true) has been called on the DOMMediaStream. This // happens when offer/answer concludes. bool mReceiving; }; class PeerConnectionMedia : public sigslot::has_slots<> { - ~PeerConnectionMedia() {} + ~PeerConnectionMedia() + { + MOZ_RELEASE_ASSERT(!mMainThread); + } public: explicit PeerConnectionMedia(PeerConnectionImpl *parent); PeerConnectionImpl* GetPC() { return mParent; } nsresult Init(const std::vector& stun_servers, const std::vector& turn_servers); // WARNING: This destroys the object!