fixed rare race condition when receiving transport info right after WebRTCWrapper closes
fixes #3849
This commit is contained in:
parent
1ae7d6be16
commit
637c0cb15a
|
@ -239,7 +239,11 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
||||||
}
|
}
|
||||||
final Set<Map.Entry<String, RtpContentMap.DescriptionTransport>> candidates = contentMap.contents.entrySet();
|
final Set<Map.Entry<String, RtpContentMap.DescriptionTransport>> candidates = contentMap.contents.entrySet();
|
||||||
if (this.state == State.SESSION_ACCEPTED) {
|
if (this.state == State.SESSION_ACCEPTED) {
|
||||||
|
try {
|
||||||
processCandidates(candidates);
|
processCandidates(candidates);
|
||||||
|
} catch (final WebRTCWrapper.PeerConnectionNotInitialized e) {
|
||||||
|
Log.w(Config.LOGTAG, id.account.getJid().asBareJid() + ": PeerConnection was not initialized when processing transport info. this usually indicates a race condition that can be ignored");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pendingIceCandidates.push(candidates);
|
pendingIceCandidates.push(candidates);
|
||||||
}
|
}
|
||||||
|
@ -810,7 +814,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
||||||
final PeerConnection.PeerConnectionState state;
|
final PeerConnection.PeerConnectionState state;
|
||||||
try {
|
try {
|
||||||
state = webRTCWrapper.getState();
|
state = webRTCWrapper.getState();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final WebRTCWrapper.PeerConnectionNotInitialized e) {
|
||||||
//We usually close the WebRTCWrapper *before* transitioning so we might still
|
//We usually close the WebRTCWrapper *before* transitioning so we might still
|
||||||
//be in SESSION_ACCEPTED even though the peerConnection has been torn down
|
//be in SESSION_ACCEPTED even though the peerConnection has been torn down
|
||||||
return RtpEndUserState.ENDING_CALL;
|
return RtpEndUserState.ENDING_CALL;
|
||||||
|
|
|
@ -552,7 +552,7 @@ public class WebRTCWrapper {
|
||||||
private PeerConnection requirePeerConnection() {
|
private PeerConnection requirePeerConnection() {
|
||||||
final PeerConnection peerConnection = this.peerConnection;
|
final PeerConnection peerConnection = this.peerConnection;
|
||||||
if (peerConnection == null) {
|
if (peerConnection == null) {
|
||||||
throw new IllegalStateException("initialize PeerConnection first");
|
throw new PeerConnectionNotInitialized();
|
||||||
}
|
}
|
||||||
return peerConnection;
|
return peerConnection;
|
||||||
}
|
}
|
||||||
|
@ -617,6 +617,14 @@ public class WebRTCWrapper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class PeerConnectionNotInitialized extends IllegalStateException {
|
||||||
|
|
||||||
|
private PeerConnectionNotInitialized() {
|
||||||
|
super("initialize PeerConnection first");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static class CapturerChoice {
|
private static class CapturerChoice {
|
||||||
private final CameraVideoCapturer cameraVideoCapturer;
|
private final CameraVideoCapturer cameraVideoCapturer;
|
||||||
private final CameraEnumerationAndroid.CaptureFormat captureFormat;
|
private final CameraEnumerationAndroid.CaptureFormat captureFormat;
|
||||||
|
|
Loading…
Reference in a new issue