[freenet-cvs] r18299 - trunk/freenet/src/freenet/node

toad at freenetproject.org toad at freenetproject.org
Sat Mar 1 20:53:34 UTC 2008


Author: toad
Date: 2008-03-01 20:53:34 +0000 (Sat, 01 Mar 2008)
New Revision: 18299

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeClientCore.java
   trunk/freenet/src/freenet/node/RequestHandler.java
Log:
Fix race condition resulting in sendTerminal being called twice.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java	2008-03-01 20:36:28 UTC (rev 18298)
+++ trunk/freenet/src/freenet/node/Node.java	2008-03-01 20:53:34 UTC (rev 18299)
@@ -1893,7 +1893,7 @@
 	 * a RequestSender, unless the HTL is 0, in which case NULL.
 	 * RequestSender.
 	 */
-	public Object makeRequestSender(Key key, short htl, long uid, PeerNode source, boolean localOnly, boolean cache, boolean ignoreStore, boolean offersOnly) {
+	public Object makeRequestSender(Key key, short htl, long uid, PeerNode source, boolean localOnly, boolean cache, boolean ignoreStore, boolean offersOnly, RequestSender.Listener listener) {
 		logMINOR = Logger.shouldLog(Logger.MINOR, this);
 		if(logMINOR) Logger.minor(this, "makeRequestSender("+key+ ',' +htl+ ',' +uid+ ',' +source+") on "+getDarknetPortNumber());
 		// In store?
@@ -1933,6 +1933,7 @@
 		}
 		if(sender != null) {
 			if(logMINOR) Logger.minor(this, "Data already being transferred: "+sender);
+			if(listener != null) sender.addListener(listener);
 			return sender;
 		}
 
@@ -1955,6 +1956,7 @@
 			sender = new RequestSender(key, null, htl, uid, this, source, offersOnly);
 			// RequestSender adds itself to requestSenders
 		}
+		if(listener != null) sender.addListener(listener);
 		sender.start();
 		if(logMINOR) Logger.minor(this, "Created new sender: "+sender);
 		return sender;

Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java	2008-03-01 20:36:28 UTC (rev 18298)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java	2008-03-01 20:53:34 UTC (rev 18299)
@@ -470,7 +470,7 @@
 	 */
 	void asyncGet(Key key, boolean cache, boolean offersOnly, long uid, RequestSender.Listener listener) {
 		try {
-			Object o = node.makeRequestSender(key, node.maxHTL(), uid, null, false, cache, false, offersOnly);
+			Object o = node.makeRequestSender(key, node.maxHTL(), uid, null, false, cache, false, offersOnly, listener);
 			if(o instanceof CHKBlock) {
 				node.unlockUID(uid, false, false, true, false);
 				return; // Already have it.
@@ -509,7 +509,7 @@
 			throw new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
 		}
 		try {
-		Object o = node.makeRequestSender(key.getNodeCHK(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false);
+		Object o = node.makeRequestSender(key.getNodeCHK(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false, null);
 		if(o instanceof CHKBlock) {
 			try {
 				return new ClientCHKBlock((CHKBlock)o, key);
@@ -624,7 +624,7 @@
 			throw new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
 		}
 		try {
-		Object o = node.makeRequestSender(key.getNodeKey(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false);
+		Object o = node.makeRequestSender(key.getNodeKey(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false, null);
 		if(o instanceof SSKBlock) {
 			try {
 				SSKBlock block = (SSKBlock)o;

Modified: trunk/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestHandler.java	2008-03-01 20:36:28 UTC (rev 18298)
+++ trunk/freenet/src/freenet/node/RequestHandler.java	2008-03-01 20:53:34 UTC (rev 18299)
@@ -132,7 +132,7 @@
         Message accepted = DMT.createFNPAccepted(uid);
         source.sendAsync(accepted, null, 0, this);
         
-        Object o = node.makeRequestSender(key, htl, uid, source, false, true, false, false);
+        Object o = node.makeRequestSender(key, htl, uid, source, false, true, false, false, this);
         if(o instanceof KeyBlock) {
         	returnLocalData((KeyBlock)o);
             return;
@@ -150,8 +150,6 @@
         //If we cannot respond before this time, the 'source' node has already fatally timed out (and we need not return packets which will not be claimed)
 		searchStartTime = System.currentTimeMillis();
 		responseDeadline = searchStartTime + RequestSender.FETCH_TIMEOUT + source.getProbableSendQueueTime();
-        
-        rs.addListener(this);
 	}
 		
 	public void onReceivedRejectOverload() {




More information about the cvs mailing list