Author: toad
Date: 2007-06-13 00:04:52 +0000 (Wed, 13 Jun 2007)
New Revision: 13550
Modified:
trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
Log:
Don't accept the main jar from the same peer twice at the same time.
Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2007-06-12 23:49:05 UTC (rev 13549)
+++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2007-06-13 00:04:52 UTC (rev 13550)
@@ -227,6 +227,7 @@
nodesOfferedMainJar.add(source);
return;
} else {
+
if(nodesSendingMainJar.contains(source)) return;
nodesAskedSendMainJar.add(source);
}
}
@@ -931,6 +932,9 @@
System.err.println("Failed receiving main jar
"+version+" because URI not parsable: "+e+" for "+key);
e.printStackTrace();
cancelSend(source, uid);
+ synchronized(this) {
+ this.nodesAskedSendMainJar.remove(source);
+ }
return true;
}
@@ -940,6 +944,9 @@
"Our URI:
"+updateManager.updateURI+"\n"+
"Their URI: "+jarURI);
cancelSend(source, uid);
+ synchronized(this) {
+ this.nodesAskedSendMainJar.remove(source);
+ }
return true;
}
@@ -947,6 +954,9 @@
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Key blown, so not receiving
main jar from "+source+ "("+uid+")");
cancelSend(source, uid);
+ synchronized(this) {
+ this.nodesAskedSendMainJar.remove(source);
+ }
return true;
}
@@ -955,6 +965,9 @@
Logger.error(this, "Node "+source.getPeer()+" :
"+source.getName()+" offered us a main jar ("+version+")
"+SizeUtil.formatSize(length)+" long. This is unacceptably long so we have
refused the transfer.");
// If the transfer fails, we don't try again.
cancelSend(source, uid);
+ synchronized(this) {
+ this.nodesAskedSendMainJar.remove(source);
+ }
return true;
}
@@ -969,6 +982,9 @@
System.err.println("Cannot save new main jar to disk
and therefore cannot fetch it from our peer!: "+e);
e.printStackTrace();
cancelSend(source, uid);
+ synchronized(this) {
+ this.nodesAskedSendMainJar.remove(source);
+ }
return true;
}
@@ -977,6 +993,9 @@
raf = new RandomAccessFileWrapper(temp, "rw");
} catch (FileNotFoundException e) {
Logger.error(this, "Peer "+source+" sending us a main
jar binary blob, but we lost the temp file "+temp+" : "+e, e);
+ synchronized(this) {
+ this.nodesAskedSendMainJar.remove(source);
+ }
return true;
}
@@ -988,12 +1007,22 @@
Thread t = new Thread(new Runnable() {
public void run() {
- if(br.receive()) {
- // Success!
- processMainJarBlob(temp, source,
version, jarURI);
- } else {
- Logger.error(this, "Failed to transfer
main jar "+version+" from "+source);
- System.err.println("Failed to transfer
main jar "+version+" from "+source);
+ try {
+
synchronized(UpdateOverMandatoryManager.class) {
+
nodesAskedSendMainJar.remove(source);
+ nodesSendingMainJar.add(source);
+ }
+ if(br.receive()) {
+ // Success!
+ processMainJarBlob(temp,
source, version, jarURI);
+ } else {
+ Logger.error(this, "Failed to
transfer main jar "+version+" from "+source);
+ System.err.println("Failed to
transfer main jar "+version+" from "+source);
+ }
+ } finally {
+
synchronized(UpdateOverMandatoryManager.class) {
+
nodesSendingMainJar.remove(source);
+ }
}
}