Author: toad
Date: 2007-12-03 21:43:56 +0000 (Mon, 03 Dec 2007)
New Revision: 16246
Modified:
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Locking: always use messagesToSendNow to lock itself. Sometimes nested within
PeerNode.this, but always take messages last.
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-12-03 21:37:47 UTC
(rev 16245)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-12-03 21:43:56 UTC
(rev 16246)
@@ -175,7 +175,8 @@
final Node node;
/** The PeerManager we serve */
final PeerManager peers;
- /** MessageItem's to send ASAP */
+ /** MessageItem's to send ASAP.
+ * LOCKING: Lock on self, always take that lock last. Sometimes used
inside PeerNode.this lock. */
private final LinkedList messagesToSendNow;
/** When did we last receive a SwapRequest? */
private long timeLastReceivedSwapRequest;
@@ -1004,15 +1005,17 @@
previousTracker = null;
unverifiedTracker = null;
}
- if(dumpMessageQueue) {
- messagesToSendNow.clear();
- }
// Else DO NOT clear trackers, because hopefully it's a
temporary connectivity glitch.
sendHandshakeTime = now;
synchronized(this) {
timePrevDisconnect = timeLastDisconnect;
timeLastDisconnect = now;
}
+ if(dumpMessageQueue) {
+ synchronized(messagesToSendNow) {
+ messagesToSendNow.clear();
+ }
+ }
}
node.lm.lostOrRestartedNode(this);
setPeerNodeStatus(now);
@@ -1021,7 +1024,7 @@
public void run() {
if(!PeerNode.this.isConnected() &&
timeLastDisconnect ==
now)
- synchronized(PeerNode.this) {
+
synchronized(PeerNode.this.messagesToSendNow) {
PeerNode.this.messagesToSendNow.clear();
}
}
@@ -1570,7 +1573,9 @@
// Messages do not persist across restarts.
// Generally they would be incomprehensible,
anything that isn't should be sent as
// connection initial messages by
maybeOnConnect().
- messagesToSendNow.clear();
+ synchronized(messagesToSendNow) {
+ messagesToSendNow.clear();
+ }
} // else it's a rekey
if(unverified) {
if(unverifiedTracker != null) {