Author: toad
Date: 2008-10-08 22:53:37 +0000 (Wed, 08 Oct 2008)
New Revision: 22972

Modified:
   branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
Log:
We probably need to activate to depth 2.
Otherwise we risk NPEs in equals() in HashMap impl.


Modified: 
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2008-10-08 22:34:45 UTC (rev 22971)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2008-10-08 22:53:37 UTC (rev 22972)
@@ -172,7 +172,7 @@
                        metadata = m;
                        if(persistent) {
                                container.activate(SimpleManifestPutter.this, 
1);
-                               
container.activate(putHandlersWaitingForMetadata, 1);
+                               
container.activate(putHandlersWaitingForMetadata, 2);
                        }
                        synchronized(SimpleManifestPutter.this) {
                                putHandlersWaitingForMetadata.remove(this);
@@ -242,7 +242,7 @@
                public void onBlockSetFinished(ClientPutState state, 
ObjectContainer container, ClientContext context) {
                        if(persistent) {
                                container.activate(SimpleManifestPutter.this, 
1);
-                               container.activate(waitingForBlockSets, 1);
+                               container.activate(waitingForBlockSets, 2);
                        }
                        synchronized(SimpleManifestPutter.this) {
                                waitingForBlockSets.remove(this);
@@ -438,7 +438,7 @@

        private void gotAllMetadata(ObjectContainer container, ClientContext 
context) {
                if(persistent()) {
-                       container.activate(putHandlersByName, 1);
+                       container.activate(putHandlersByName, 2);
                }
                if(logMINOR) Logger.minor(this, "Got all metadata");
                HashMap namesToByteArrays = new HashMap();
@@ -786,6 +786,8 @@
        public void onBlockSetFinished(ClientPutState state, ObjectContainer 
container, ClientContext context) {
                synchronized(this) {
                        this.metadataBlockSetFinalized = true;
+                       if(persistent())
+                               container.activate(waitingForBlockSets, 2);
                        if(!waitingForBlockSets.isEmpty()) {
                                if(persistent())
                                        container.store(this);
@@ -801,6 +803,8 @@
        public void blockSetFinalized(ObjectContainer container, ClientContext 
context) {
                synchronized(this) {
                        if(!metadataBlockSetFinalized) return;
+                       if(persistent())
+                               container.activate(waitingForBlockSets, 2);
                        if(waitingForBlockSets.isEmpty()) return;
                }
                super.blockSetFinalized(container, context);
@@ -903,8 +907,8 @@

        protected void onFetchable(PutHandler handler, ObjectContainer 
container) {
                if(persistent()) {
-                       container.activate(putHandlersWaitingForFetchable, 1);
-                       container.activate(metadataPuttersUnfetchable, 1);
+                       container.activate(putHandlersWaitingForFetchable, 2);
+                       container.activate(metadataPuttersUnfetchable, 2);
                        container.activate(cb, 1);
                }
                synchronized(this) {
@@ -926,8 +930,8 @@
                Metadata m = (Metadata) state.getToken();
                if(persistent()) {
                        container.activate(m, 100);
-                       container.activate(metadataPuttersUnfetchable, 1);
-                       container.activate(putHandlersWaitingForFetchable, 1);
+                       container.activate(metadataPuttersUnfetchable, 2);
+                       container.activate(putHandlersWaitingForFetchable, 2);
                        container.activate(cb, 1);
                }
                synchronized(this) {


Reply via email to