diff options
author | Sebastien Vincent <seb@jitsi.org> | 2011-10-10 15:20:27 +0000 |
---|---|---|
committer | Sebastien Vincent <seb@jitsi.org> | 2011-10-10 15:20:27 +0000 |
commit | 55b193fdd656261587df168e3c7890af3e5fb6b2 (patch) | |
tree | 0e5a4a8c4850f009e8e393f55457f2827ca91f96 /src/net/java | |
parent | 13ff1f603ba2cdf6cbe90ce74f5811dc9e489cf0 (diff) | |
download | jitsi-55b193fdd656261587df168e3c7890af3e5fb6b2.zip jitsi-55b193fdd656261587df168e3c7890af3e5fb6b2.tar.gz jitsi-55b193fdd656261587df168e3c7890af3e5fb6b2.tar.bz2 |
Fixes NPE from TransportManager.sendHolePunchPacket() when a Jingle with Google P2P transport peer answer too quickly a call.
Diffstat (limited to 'src/net/java')
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/jabber/P2PTransportManager.java | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/P2PTransportManager.java b/src/net/java/sip/communicator/impl/protocol/jabber/P2PTransportManager.java index 4cc47cb..f8cc49f 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/P2PTransportManager.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/P2PTransportManager.java @@ -33,11 +33,16 @@ public class P2PTransportManager = Logger.getLogger(P2PTransportManager.class); /** - * Synchronization object. + * Synchronization object for harvesting wrapup. */ private final Object wrapupSyncRoot = new Object(); /** + * Synchronization object for connectivity wrapup. + */ + private final Object stateSyncRoot = new Object(); + + /** * Creates a new instance of this transport manager, binding it to the * specified peer. * @@ -490,9 +495,43 @@ public class P2PTransportManager if (startConnectivityEstablishment) { iceAgent.startConnectivityEstablishment(); + + synchronized(stateSyncRoot) + { + stateSyncRoot.notify(); + } return true; } } return false; } + + /** + * Waits for the associated ICE <tt>Agent</tt> to finish any started + * connectivity checks. + * + * @see TransportManagerJabberImpl#wrapupConnectivityEstablishment() + * @throws OperationFailedException if ICE processing has failed + */ + @Override + public void wrapupConnectivityEstablishment() + throws OperationFailedException + { + // wait iceAgent to be started before attempt to wrapup + while(iceAgent.getState() == IceProcessingState.WAITING) + { + synchronized(stateSyncRoot) + { + try + { + stateSyncRoot.wait(); + } + catch(InterruptedException e) + { + } + } + } + + super.wrapupConnectivityEstablishment(); + } } |