From 761d38e61f6f687913c315446b7511c5f80d019d Mon Sep 17 00:00:00 2001
From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
Date: Tue, 20 Oct 2015 10:15:35 -0400
Subject: [PATCH] rtp: fix RtpSession::restartSender()

Calling this API causes a race condition with RtpSession::start().
The former needs the latter to be run first, this was not enforced,
causing a crash by nullptr access on socketPair_ member.
This patch checks for a non-nullptr socketPair_ to procceed the restart.

Issue: #81987
Change-Id: I20886fe70398f018621aade1c7bac3ff15ef9055
---
 src/media/audio/audio_rtp_session.cpp | 4 ++++
 src/media/video/video_rtp_session.cpp | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/src/media/audio/audio_rtp_session.cpp b/src/media/audio/audio_rtp_session.cpp
index 7d44261dde..afd9590d1b 100644
--- a/src/media/audio/audio_rtp_session.cpp
+++ b/src/media/audio/audio_rtp_session.cpp
@@ -392,6 +392,10 @@ void
 AudioRtpSession::restartSender()
 {
     std::lock_guard<std::recursive_mutex> lock(mutex_);
+    // ensure that start has been called before restart
+    if (not socketPair_)
+        return;
+
     startSender();
 }
 
diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index 4a1571104a..219d4da360 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -114,6 +114,10 @@ VideoRtpSession::restartSender()
 {
     std::lock_guard<std::recursive_mutex> lock(mutex_);
 
+    // ensure that start has been called before restart
+    if (not socketPair_)
+        return;
+
     startSender();
     setupVideoPipeline();
 }
-- 
GitLab