From ffc953abc8fb86000effbad8c7e39a57b67e1e3f Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Mon, 24 Dec 2012 23:47:14 +0000 Subject: [PATCH] Don't hold the Peer lock whilst invoking a ping callback. --- .../main/java/com/google/bitcoin/core/Peer.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/google/bitcoin/core/Peer.java b/core/src/main/java/com/google/bitcoin/core/Peer.java index 29ec8379..fe5d0bde 100644 --- a/core/src/main/java/com/google/bitcoin/core/Peer.java +++ b/core/src/main/java/com/google/bitcoin/core/Peer.java @@ -846,14 +846,16 @@ public class Peer { return (long)((double) sum / lastPingTimes.length); } - private synchronized void processPong(Pong m) { - ListIterator it = pendingPings.listIterator(); + private void processPong(Pong m) { PendingPing ping = null; - while (it.hasNext()) { - ping = it.next(); - if (m.getNonce() == ping.nonce) { - it.remove(); - break; + synchronized (this) { + ListIterator it = pendingPings.listIterator(); + while (it.hasNext()) { + ping = it.next(); + if (m.getNonce() == ping.nonce) { + it.remove(); + break; + } } } // This line may trigger an event listener being run on the same thread, if one is attached to the