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() {