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


Reply via email to