avoid race condition when restarting ICE

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java | 20 
1 file changed, 14 insertions(+), 6 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java 🔗

@@ -415,12 +415,20 @@ public class WebRTCWrapper {
     }
 
     void restartIce() {
-        executorService.execute(() -> {
-            final PeerConnection peerConnection = requirePeerConnection();
-            setIsReadyToReceiveIceCandidates(false);
-            peerConnection.restartIce();
-            requirePeerConnection().restartIce();}
-        );
+        executorService.execute(
+                () -> {
+                    final PeerConnection peerConnection;
+                    try {
+                        peerConnection = requirePeerConnection();
+                    } catch (final PeerConnectionNotInitialized e) {
+                        Log.w(
+                                EXTENDED_LOGGING_TAG,
+                                "PeerConnection vanished before we could execute restart");
+                        return;
+                    }
+                    setIsReadyToReceiveIceCandidates(false);
+                    peerConnection.restartIce();
+                });
     }
 
     public void setIsReadyToReceiveIceCandidates(final boolean ready) {