Author: toad
Date: 2008-07-12 02:00:23 +0000 (Sat, 12 Jul 2008)
New Revision: 21089
Modified:
branches/db4o/freenet/src/freenet/node/updater/NodeUpdater.java
Log:
Locking: maybe fix deadlock.
BACKPORT IF POSSIBLE.
Modified: branches/db4o/freenet/src/freenet/node/updater/NodeUpdater.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/updater/NodeUpdater.java
2008-07-12 01:56:32 UTC (rev 21088)
+++ branches/db4o/freenet/src/freenet/node/updater/NodeUpdater.java
2008-07-12 02:00:23 UTC (rev 21089)
@@ -85,24 +85,26 @@
}
}
- public synchronized void onFoundEdition(long l, USK key,
ObjectContainer container, ClientContext context, boolean wasMetadata, short
codec, byte[] data) {
+ public void onFoundEdition(long l, USK key, ObjectContainer container,
ClientContext context, boolean wasMetadata, short codec, byte[] data) {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Found edition "+l);
System.err.println("Found "+(extUpdate?"freenet-ext.jar " :
"")+"update edition "+l);
+ synchronized(this) {
if(!isRunning) return;
int found = (int)key.suggestedEdition;
- if(found > availableVersion){
+ if(found <= availableVersion){
+ return;
+ }
Logger.minor(this, "Updating availableVersion from
"+availableVersion+" to "+found+" and queueing an update");
this.availableVersion = found;
+ }
ticker.queueTimedJob(new Runnable() {
public void run() {
maybeUpdate();
}
}, 60*1000); // leave some time in case we get later
editions
- // LOCKING: Always take the NodeUpdater lock *BEFORE*
the NodeUpdateManager lock
manager.onStartFetching(extUpdate);
- }
}
public void maybeUpdate(){