diff --git a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java index 4f05aa89102fa8f365b75892fcdc271d4abbbbb2..19a7074601162a0c1c545f2b0a3124c23b099ddd 100644 --- a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java @@ -325,7 +325,12 @@ public class RtpSessionActivity extends XmppActivity retractSessionProposal(); finish(); } else { - requireRtpConnection().endCall(); + try { + requireRtpConnection().endCall(); + } catch (final IllegalStateException e) { + // No call, already done + finish(); + } } } diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java index 45853cc72fb24ab01abd9b5ba041e3ce2a97014a..79ea3580c4b3fdb0a3abddff5fae8ca034646d56 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java @@ -719,7 +719,12 @@ public class WebRTCWrapper { public boolean applyDtmfTone(String tone) { if (localAudioTrack == null || localAudioTrack.rtpSender == null) return false; - localAudioTrack.rtpSender.dtmf().insertDtmf(tone, TONE_DURATION, 100); + try { + localAudioTrack.rtpSender.dtmf().insertDtmf(tone, TONE_DURATION, 100); + } catch (final IllegalStateException e) { + // Race condition, DtmfSender has been disposed + return false; + } final var handler = new android.os.Handler(android.os.Looper.getMainLooper()); handler.post(() -> { final var toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, DEFAULT_TONE_VOLUME);