diff --git a/src/sdk/base/src/main/java/owt/base/PeerConnectionChannel.java b/src/sdk/base/src/main/java/owt/base/PeerConnectionChannel.java index 5544187..df7c19b 100644 --- a/src/sdk/base/src/main/java/owt/base/PeerConnectionChannel.java +++ b/src/sdk/base/src/main/java/owt/base/PeerConnectionChannel.java @@ -173,18 +173,20 @@ private void addOrQueueCandidate(final IceCandidate iceCandidate) { protected void drainRemoteCandidates() { DCHECK(pcExecutor); DCHECK(queuedRemoteCandidates); - synchronized (remoteIceLock) { - for (final IceCandidate candidate : queuedRemoteCandidates) { - pcExecutor.execute(() -> { + pcExecutor.execute(() -> { + synchronized (remoteIceLock) { + Iterator iterator = queuedRemoteCandidates.iterator(); + while (iterator.hasNext()) { if (disposed()) { return; } + IceCandidate candidate = iterator.next(); Log.d(LOG_TAG, "add ice candidate"); peerConnection.addIceCandidate(candidate); - queuedRemoteCandidates.remove(candidate); - }); + iterator.remove(); + } } - } + }); } private void setRemoteDescription(final SessionDescription remoteDescription) {