Author: toad
Date: 2009-01-30 01:34:13 +0000 (Fri, 30 Jan 2009)
New Revision: 25388

Modified:
   branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
Log:
More activation work


Modified: 
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2009-01-29 23:07:04 UTC (rev 25387)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2009-01-30 01:34:13 UTC (rev 25388)
@@ -516,6 +516,7 @@
                        context.jobRunner.removeRestartJob(this, 
NativeThread.NORM_PRIORITY, container);
                        container.activate(SimpleManifestPutter.this, 1);
                        innerGotAllMetadata(container, context);
+                       container.deactivate(SimpleManifestPutter.this, 1);
                }
                
        };
@@ -575,6 +576,9 @@
                        container.store(this);
                }
                resolveAndStartBase(container, context);
+               if(persistent()) {
+                       container.deactivate(putHandlersByName, 1);
+               }
                
        }
        
@@ -673,6 +677,8 @@
                        if(persistent()) {
                                container.store(metadataPuttersByMetadata);
                                container.store(metadataPuttersUnfetchable);
+                               container.deactivate(metadataPuttersByMetadata, 
1);
+                               
container.deactivate(metadataPuttersUnfetchable, 1);
                        }
                        metadataInserter.start(null, container, context);
                } catch (InsertException e) {
@@ -681,6 +687,7 @@
                }
                if(persistent()) {
                        container.deactivate(metadataInserter, 1);
+                       container.deactivate(elementsToPutInArchive, 1);
                }
        }
 
@@ -802,6 +809,7 @@
                }
                if(persistent()) {
                        container.store(metadataPuttersByMetadata);
+                       container.deactivate(metadataPuttersByMetadata, 1);
                }
        }
 
@@ -938,6 +946,7 @@
                if(persistent()) {
                        container.store(metadataPuttersByMetadata);
                        container.store(this);
+                       container.deactivate(metadataPuttersByMetadata, 1);
                }
                complete(container);
        }
@@ -990,14 +999,18 @@
                        if(persistent())
                                container.activate(waitingForBlockSets, 2);
                        if(!waitingForBlockSets.isEmpty()) {
-                               if(persistent())
+                               if(persistent()) {
                                        container.store(this);
+                                       
container.deactivate(waitingForBlockSets, 1);
+                               }
                                return;
                        }
                }
                this.blockSetFinalized(container, context);
-               if(persistent())
+               if(persistent()) {
                        container.store(this);
+                       container.deactivate(waitingForBlockSets, 1);
+               }
        }
 
        @Override
@@ -1006,8 +1019,14 @@
                        if(!metadataBlockSetFinalized) return;
                        if(persistent())
                                container.activate(waitingForBlockSets, 2);
-                       if(waitingForBlockSets.isEmpty()) return;
+                       if(waitingForBlockSets.isEmpty()) {
+                               if(persistent())
+                                       
container.deactivate(waitingForBlockSets, 1);
+                               return;
+                       }
                }
+               if(persistent())
+                       container.deactivate(waitingForBlockSets, 1);
                super.blockSetFinalized(container, context);
                if(persistent())
                        container.store(this);
@@ -1110,45 +1129,64 @@
                if(persistent()) {
                        container.activate(putHandlersWaitingForFetchable, 2);
                        container.activate(metadataPuttersUnfetchable, 2);
-                       container.activate(cb, 1);
                }
-               synchronized(this) {
-                       putHandlersWaitingForFetchable.remove(handler);
-                       if(fetchable) return;
-                       if(!putHandlersWaitingForFetchable.isEmpty()) return;
-                       if(!hasResolvedBase) return;
-                       if(!metadataPuttersUnfetchable.isEmpty()) return;
-                       fetchable = true;
+               if(checkFetchable(handler)) {
+                       if(persistent()) {
+                               container.store(putHandlersWaitingForMetadata);
+                               container.store(this);
+                               
container.deactivate(putHandlersWaitingForFetchable, 1);
+                               
container.deactivate(metadataPuttersUnfetchable, 1);
+                               container.activate(cb, 1);
+                       }
+                       cb.onFetchable(this, container);
+               } else {
+                       if(persistent()) {
+                               
container.deactivate(putHandlersWaitingForFetchable, 1);
+                               
container.deactivate(metadataPuttersUnfetchable, 1);
+                       }
                }
-               if(persistent()) {
-                       container.store(putHandlersWaitingForMetadata);
-                       container.store(this);
-               }
-               cb.onFetchable(this, container);
        }
 
+       private boolean checkFetchable(PutHandler handler) {
+               putHandlersWaitingForFetchable.remove(handler);
+               if(fetchable) return false;
+               if(!putHandlersWaitingForFetchable.isEmpty()) return false;
+               if(!hasResolvedBase) return false;
+               if(!metadataPuttersUnfetchable.isEmpty()) return false;
+               fetchable = true;
+               return true;
+       }
+
        public void onFetchable(ClientPutState state, ObjectContainer 
container) {
                Metadata m = (Metadata) state.getToken();
                if(persistent()) {
                        container.activate(m, 100);
                        container.activate(metadataPuttersUnfetchable, 2);
                        container.activate(putHandlersWaitingForFetchable, 2);
-                       container.activate(cb, 1);
                }
-               synchronized(this) {
-                       metadataPuttersUnfetchable.remove(m);
-                       if(!metadataPuttersUnfetchable.isEmpty()) return;
-                       if(fetchable) return;
-                       if(!putHandlersWaitingForFetchable.isEmpty()) return;
-                       fetchable = true;
+               if(checkFetchable(m)) {
+                       if(persistent()) {
+                               container.store(metadataPuttersUnfetchable);
+                               container.store(this);
+                               container.activate(cb, 1);
+                       }
+                       cb.onFetchable(this, container);
                }
                if(persistent()) {
-                       container.store(metadataPuttersUnfetchable);
-                       container.store(this);
+                       container.deactivate(metadataPuttersUnfetchable, 1);
+                       container.deactivate(putHandlersWaitingForFetchable, 1);
                }
-               cb.onFetchable(this, container);
        }
 
+       private synchronized boolean checkFetchable(Metadata m) {
+               metadataPuttersUnfetchable.remove(m);
+               if(!metadataPuttersUnfetchable.isEmpty()) return false;
+               if(fetchable) return false;
+               if(!putHandlersWaitingForFetchable.isEmpty()) return false;
+               fetchable = true;
+               return true;
+       }
+
        @Override
        public void onTransition(ClientGetState oldState, ClientGetState 
newState, ObjectContainer container) {
                // Ignore

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to