aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java
diff options
context:
space:
mode:
authorSebastien Vincent <seb@jitsi.org>2011-10-10 15:20:27 +0000
committerSebastien Vincent <seb@jitsi.org>2011-10-10 15:20:27 +0000
commit55b193fdd656261587df168e3c7890af3e5fb6b2 (patch)
tree0e5a4a8c4850f009e8e393f55457f2827ca91f96 /src/net/java
parent13ff1f603ba2cdf6cbe90ce74f5811dc9e489cf0 (diff)
downloadjitsi-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.java41
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();
+ }
}