[jitsi-dev] ice4j / ConcurrentModificationException


#1

I regularly see ConcurrentModificationException

I suspect one of the following:

- some thread is still running when it thinks everything is completed

- my own code has started two copies of the agent or something else that
is bad (but there are no other log messages to suggest that)

- maybe it is not permitted to traverse the data structures of the agent
(e.g. to find the selected pairs) while in the callback of the listener
object?

I'm particularly suspicious about the two lines `Harvester selected'
well after the ICE checks are completed.

I've extracted the relevant stuff from the logs - if anyone can suggest
areas of the code I should look at, that would be great.

ICE checks finish...

I/org.ice4j.ice.Agent( 4202): CheckList of stream audio is COMPLETED
I/org.ice4j.ice.Agent( 4202): ICE state is COMPLETED
I/Listener( 4202): IceProcessingListener: received event: Completed

My listener class has been invoked, it scans the selected candidates:

I/ICESocketAllocator( 4202): handling stream: audio
I/ICESocketAllocator( 4202): found stream: audio, component: 1, port: 21000
I/ICESocketAllocator( 4202): found stream: audio, component: 2, port: 21001

I see these in the log:

I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.1 host
I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.2 host

and then this:

I/ConnectivityCheckServer( 4202): Failed to send
BINDING-RESPONSE(0x101)[attrib.count=5 len=76
tranID=0x8D31E3CC340192B848AC54D0] through
192.168.1.118/192.168.1.118:21001/udp
I/ConnectivityCheckServer( 4202): java.util.ConcurrentModificationException
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/ConnectivityCheckServer( 4202): at
org.ice4j.message.Message.encode(Message.java:890)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/ConnectivityCheckServer( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/ConnectivityCheckServer( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Received an invalid request.
I/StunStack( 4202): java.lang.RuntimeException: Failed to send a response
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:226)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/StunStack( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/StunStack( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Caused by: java.util.ConcurrentModificationException
I/StunStack( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/StunStack( 4202): at org.ice4j.message.Message.encode(Message.java:890)
I/StunStack( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/StunStack( 4202): ... 5 more
I/org.ice4j.ice.Agent( 4202): ICE state is TERMINATED
I/System.out( 4202): UA: IceProcessingListener: received event: Terminated
I/System.out( 4202): UA: IceProcessingListener: unhandled event: Terminated
I/System.out( 4202): UA: ACCEPT


#2

Just an update on this: I added a synchronized block, just before the
line that generates the exception, to make a copy of the attribute set:

        Vector<Map.Entry<Character, Attribute>> v =
          new Vector<Map.Entry<Character, Attribute>>();
        synchronized (attributes) {
          v.addAll(attributes.entrySet());
        }
        Iterator<Map.Entry<Character, Attribute>> iter
            = v.iterator();

Using this new Iterator, I haven't seen the exception again today

···

On 11/01/12 14:41, Daniel Pocock wrote:

I regularly see ConcurrentModificationException

I suspect one of the following:

- some thread is still running when it thinks everything is completed

- my own code has started two copies of the agent or something else that
is bad (but there are no other log messages to suggest that)

- maybe it is not permitted to traverse the data structures of the agent
(e.g. to find the selected pairs) while in the callback of the listener
object?

I'm particularly suspicious about the two lines `Harvester selected'
well after the ICE checks are completed.

I've extracted the relevant stuff from the logs - if anyone can suggest
areas of the code I should look at, that would be great.

ICE checks finish...

I/org.ice4j.ice.Agent( 4202): CheckList of stream audio is COMPLETED
I/org.ice4j.ice.Agent( 4202): ICE state is COMPLETED
I/Listener( 4202): IceProcessingListener: received event: Completed

My listener class has been invoked, it scans the selected candidates:

I/ICESocketAllocator( 4202): handling stream: audio
I/ICESocketAllocator( 4202): found stream: audio, component: 1, port: 21000
I/ICESocketAllocator( 4202): found stream: audio, component: 2, port: 21001

I see these in the log:

I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.1 host
I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.2 host

and then this:

I/ConnectivityCheckServer( 4202): Failed to send
BINDING-RESPONSE(0x101)[attrib.count=5 len=76
tranID=0x8D31E3CC340192B848AC54D0] through
192.168.1.118/192.168.1.118:21001/udp
I/ConnectivityCheckServer( 4202): java.util.ConcurrentModificationException
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/ConnectivityCheckServer( 4202): at
org.ice4j.message.Message.encode(Message.java:890)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/ConnectivityCheckServer( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/ConnectivityCheckServer( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Received an invalid request.
I/StunStack( 4202): java.lang.RuntimeException: Failed to send a response
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:226)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/StunStack( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/StunStack( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Caused by: java.util.ConcurrentModificationException
I/StunStack( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/StunStack( 4202): at org.ice4j.message.Message.encode(Message.java:890)
I/StunStack( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/StunStack( 4202): ... 5 more
I/org.ice4j.ice.Agent( 4202): ICE state is TERMINATED
I/System.out( 4202): UA: IceProcessingListener: received event: Terminated
I/System.out( 4202): UA: IceProcessingListener: unhandled event: Terminated
I/System.out( 4202): UA: ACCEPT


#3

Hi Daniel,

Le 11/01/12 14:41, Daniel Pocock a �crit :

I regularly see ConcurrentModificationException

I suspect one of the following:

- some thread is still running when it thinks everything is completed

After ICE is completed, there still IceConnector threads that run to process keep-alive STUN messages, TURN messages and RTP data.

- my own code has started two copies of the agent or something else that
is bad (but there are no other log messages to suggest that)

Each ICE agent is independant and has its own set of STUN stack and connectors. It should not be a problem.

- maybe it is not permitted to traverse the data structures of the agent
(e.g. to find the selected pairs) while in the callback of the listener
object?

I don't know how you get the selected pairs but here is how IceUdpTransportManager do (array element 0 is the RTP socket, element 1 is RTCP socket):

     private static final int[] COMPONENT_IDS
         = new int[] { Component.RTP, Component.RTCP };

     private DatagramSocket[] getStreamConnectorSockets(MediaType mediaType)
     {
        IceMediaStream stream = iceAgent.getStream(mediaType.toString());

         if (stream != null)
         {
             DatagramSocket[] streamConnectorSockets
                 = new DatagramSocket[COMPONENT_IDS.length];
             int streamConnectorSocketCount = 0;

             for (int i = 0; i < COMPONENT_IDS.length; i++)
             {
                 Component component = stream.getComponent(COMPONENT_IDS[i]);

                 if (component != null)
                 {
                     CandidatePair selectedPair = component.getSelectedPair();

                     if (selectedPair != null)
                     {
                         DatagramSocket streamConnectorSocket
                             = selectedPair.getLocalCandidate().
                                 getDatagramSocket();

                         if (streamConnectorSocket != null)
                         {
                             streamConnectorSockets[i] = streamConnectorSocket;
                             streamConnectorSocketCount++;
                         }
                     }
                 }
             }
             if (streamConnectorSocketCount > 0)
                 return streamConnectorSockets;
         }
         return null;

I'm particularly suspicious about the two lines `Harvester selected'
well after the ICE checks are completed.

It simply does list the component and extrat is selected candidate (pretty much like the previous sample).

I've extracted the relevant stuff from the logs - if anyone can suggest
areas of the code I should look at, that would be great.

ICE checks finish...

I/org.ice4j.ice.Agent( 4202): CheckList of stream audio is COMPLETED
I/org.ice4j.ice.Agent( 4202): ICE state is COMPLETED
I/Listener( 4202): IceProcessingListener: received event: Completed

My listener class has been invoked, it scans the selected candidates:

I/ICESocketAllocator( 4202): handling stream: audio
I/ICESocketAllocator( 4202): found stream: audio, component: 1, port: 21000
I/ICESocketAllocator( 4202): found stream: audio, component: 2, port: 21001

I see these in the log:

I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.1 host
I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.2 host

and then this:

I/ConnectivityCheckServer( 4202): Failed to send
BINDING-RESPONSE(0x101)[attrib.count=5 len=76
tranID=0x8D31E3CC340192B848AC54D0] through
192.168.1.118/192.168.1.118:21001/udp
I/ConnectivityCheckServer( 4202): java.util.ConcurrentModificationException
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/ConnectivityCheckServer( 4202): at
org.ice4j.message.Message.encode(Message.java:890)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/ConnectivityCheckServer( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/ConnectivityCheckServer( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Received an invalid request.
I/StunStack( 4202): java.lang.RuntimeException: Failed to send a response
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:226)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/StunStack( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/StunStack( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Caused by: java.util.ConcurrentModificationException
I/StunStack( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/StunStack( 4202): at org.ice4j.message.Message.encode(Message.java:890)
I/StunStack( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/StunStack( 4202): ... 5 more
I/org.ice4j.ice.Agent( 4202): ICE state is TERMINATED
I/System.out( 4202): UA: IceProcessingListener: received event: Terminated
I/System.out( 4202): UA: IceProcessingListener: unhandled event: Terminated
I/System.out( 4202): UA: ACCEPT

According to the logs it seems the error occurred in org.ice4j.message.Message class, it deals with the attribute list. Maybe the same Message is being sent as the same time. Try with the "synchronized" for the method byte[] encode(StunStack stunStack) in Message class, try again and tell us how it goes.

Regards,

···

--
Seb


#4

Hi Daniel,

Thank you :). We will test it this week or the next, to see if there is no regressions.

Best regards,

···

--
Seb

Le 11/01/12 23:51, Daniel Pocock a �crit :

Just an update on this: I added a synchronized block, just before the
line that generates the exception, to make a copy of the attribute set:

         Vector<Map.Entry<Character, Attribute>> v =
           new Vector<Map.Entry<Character, Attribute>>();
         synchronized (attributes) {
           v.addAll(attributes.entrySet());
         }
         Iterator<Map.Entry<Character, Attribute>> iter
             = v.iterator();

Using this new Iterator, I haven't seen the exception again today

On 11/01/12 14:41, Daniel Pocock wrote:

I regularly see ConcurrentModificationException

I suspect one of the following:

- some thread is still running when it thinks everything is completed

- my own code has started two copies of the agent or something else that
is bad (but there are no other log messages to suggest that)

- maybe it is not permitted to traverse the data structures of the agent
(e.g. to find the selected pairs) while in the callback of the listener
object?

I'm particularly suspicious about the two lines `Harvester selected'
well after the ICE checks are completed.

I've extracted the relevant stuff from the logs - if anyone can suggest
areas of the code I should look at, that would be great.

ICE checks finish...

I/org.ice4j.ice.Agent( 4202): CheckList of stream audio is COMPLETED
I/org.ice4j.ice.Agent( 4202): ICE state is COMPLETED
I/Listener( 4202): IceProcessingListener: received event: Completed

My listener class has been invoked, it scans the selected candidates:

I/ICESocketAllocator( 4202): handling stream: audio
I/ICESocketAllocator( 4202): found stream: audio, component: 1, port: 21000
I/ICESocketAllocator( 4202): found stream: audio, component: 2, port: 21001

I see these in the log:

I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.1 host
I/org.ice4j.ice.Agent( 4202): Harvester selected for audio.2 host

and then this:

I/ConnectivityCheckServer( 4202): Failed to send
BINDING-RESPONSE(0x101)[attrib.count=5 len=76
tranID=0x8D31E3CC340192B848AC54D0] through
192.168.1.118/192.168.1.118:21001/udp
I/ConnectivityCheckServer( 4202): java.util.ConcurrentModificationException
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/ConnectivityCheckServer( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/ConnectivityCheckServer( 4202): at
org.ice4j.message.Message.encode(Message.java:890)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/ConnectivityCheckServer( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/ConnectivityCheckServer( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/ConnectivityCheckServer( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Received an invalid request.
I/StunStack( 4202): java.lang.RuntimeException: Failed to send a response
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:226)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher$RequestListenerMessageEventHandler.handleMessageEvent(EventDispatcher.java:500)
I/StunStack( 4202): at
org.ice4j.stack.EventDispatcher.fireMessageEvent(EventDispatcher.java:257)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.handleMessageEvent(StunStack.java:686)
I/StunStack( 4202): at
org.ice4j.stack.MessageProcessor.run(MessageProcessor.java:161)
I/StunStack( 4202): at java.lang.Thread.run(Thread.java:1096)
I/StunStack( 4202): Caused by: java.util.ConcurrentModificationException
I/StunStack( 4202): at
java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:375)
I/StunStack( 4202): at
java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:373)
I/StunStack( 4202): at org.ice4j.message.Message.encode(Message.java:890)
I/StunStack( 4202): at
org.ice4j.stack.NetAccessManager.sendMessage(NetAccessManager.java:345)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.retransmitResponse(StunServerTransaction.java:207)
I/StunStack( 4202): at
org.ice4j.stack.StunServerTransaction.sendResponse(StunServerTransaction.java:184)
I/StunStack( 4202): at
org.ice4j.stack.StunStack.sendResponse(StunStack.java:501)
I/StunStack( 4202): at
org.ice4j.ice.ConnectivityCheckServer.processRequest(ConnectivityCheckServer.java:214)
I/StunStack( 4202): ... 5 more
I/org.ice4j.ice.Agent( 4202): ICE state is TERMINATED
I/System.out( 4202): UA: IceProcessingListener: received event: Terminated
I/System.out( 4202): UA: IceProcessingListener: unhandled event: Terminated
I/System.out( 4202): UA: ACCEPT