Author: toad
Date: 2008-06-26 00:45:18 +0000 (Thu, 26 Jun 2008)
New Revision: 20731

Removed:
   branches/db4o/freenet/src/freenet/client/async/HasActivationCallback.java
Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientPutter.java
   branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
Log:
Remove "if(persistent) container.activate(this, 1)" - it makes NO sense!
persistent will be false if we haven't been activated.
The caller must do the activation.

Modified: branches/db4o/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientPutter.java    
2008-06-26 00:35:41 UTC (rev 20730)
+++ branches/db4o/freenet/src/freenet/client/async/ClientPutter.java    
2008-06-26 00:45:18 UTC (rev 20731)
@@ -242,8 +242,11 @@
                        if(startedStarting) return;
                        startedStarting = true;
                }
-               if(persistent())
+               if(persistent()) {
                        container.set(this);
+                       if(oldState != null)
+                               container.activate(oldState, 1);
+               }
                if(oldState != null) oldState.cancel(container, context);
                onFailure(new InsertException(InsertException.CANCELLED), null, 
container, context);
        }

Deleted: 
branches/db4o/freenet/src/freenet/client/async/HasActivationCallback.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/HasActivationCallback.java   
2008-06-26 00:35:41 UTC (rev 20730)
+++ branches/db4o/freenet/src/freenet/client/async/HasActivationCallback.java   
2008-06-26 00:45:18 UTC (rev 20731)
@@ -1,15 +0,0 @@
-package freenet.client.async;
-
-import com.db4o.ObjectContainer;
-
-/**
- * Public interface implemented by nonpublic classes (e.g. nonpublic inner 
- * classes) that want db4o to call their objectOnActivation callback.
- * @author toad
- *
- */
-public interface HasActivationCallback {
-       
-       public void objectOnActivate(ObjectContainer container);
-
-}

Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-06-26 00:35:41 UTC (rev 20730)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-06-26 00:45:18 UTC (rev 20731)
@@ -329,8 +329,11 @@
         * When we get the metadata, start inserting it to our target key.
         * When we have inserted both the metadata and the splitfile,
         * call the master callback.
+        * 
+        * This class has to be public so that db4o can access 
objectOnActivation
+        * through reflection.
         */
-       class SplitHandler implements PutCompletionCallback, ClientPutState, 
HasActivationCallback {
+       public class SplitHandler implements PutCompletionCallback, 
ClientPutState {

                ClientPutState sfi;
                ClientPutState metadataPutter;
@@ -610,8 +613,13 @@
                                oldSFI = sfi;
                                oldMetadataPutter = metadataPutter;
                        }
-                       if(persistent)
+                       if(persistent) {
                                container.set(this);
+                               if(oldSFI != null)
+                                       container.activate(oldSFI, 1);
+                               if(oldMetadataPutter != null)
+                                       container.activate(oldMetadataPutter, 
1);
+                       }
                        if(oldSFI != null)
                                oldSFI.cancel(container, context);
                        if(oldMetadataPutter != null)
@@ -727,6 +735,8 @@
                                        if(logMINOR) Logger.minor(this, 
"Started metadata inserter: "+putter+" for "+this);
                                } else {
                                        // Get all the URIs ASAP so we can 
start to insert the metadata.
+                                       if(persistent)
+                                               
container.activate(splitInserter, 1);
                                        
((SplitFileInserter)splitInserter).forceEncode(container, context);
                                }
                        } catch (InsertException e1) {

Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2008-06-26 00:35:41 UTC (rev 20730)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2008-06-26 00:45:18 UTC (rev 20731)
@@ -253,9 +253,6 @@
        }

        public void encodedSegment(SplitFileInserterSegment segment, 
ObjectContainer container, ClientContext context) {
-               if(persistent) {
-                       container.activate(this, 1);
-               }
                if(logMINOR) Logger.minor(this, "Encoded segment 
"+segment.segNo+" of "+this);
                boolean ret = false;
                boolean encode;
@@ -302,7 +299,6 @@
        }

        private void encodeMetadata(ObjectContainer container, ClientContext 
context) {
-               container.activate(this, 1);
                boolean missingURIs;
                Metadata m = null;
                synchronized(this) {
@@ -392,13 +388,11 @@
        }

        public void segmentFinished(SplitFileInserterSegment segment, 
ObjectContainer container, ClientContext context) {
-               if(persistent)
-                       container.activate(this, 1);
                if(logMINOR) Logger.minor(this, "Segment finished: "+segment, 
new Exception("debug"));
                boolean allGone = true;
                if(countDataBlocks > 32) {
                        if(persistent)
-                               container.activate(this, 1);
+                               container.activate(parent, 1);
                        parent.onMajorProgress();
                }
                synchronized(this) {
@@ -428,8 +422,6 @@
        }

        public void segmentFetchable(SplitFileInserterSegment segment, 
ObjectContainer container) {
-               if(persistent)
-                       container.activate(this, 1);
                if(logMINOR) Logger.minor(this, "Segment fetchable: "+segment);
                synchronized(this) {
                        if(finished) return;
@@ -450,8 +442,6 @@
        }

        private void onAllFinished(ObjectContainer container, ClientContext 
context) {
-               if(persistent)
-                       container.activate(this, 1);
                if(logMINOR) Logger.minor(this, "All finished");
                try {
                        // Finished !!
@@ -483,8 +473,6 @@
        }

        public void cancel(ObjectContainer container, ClientContext context) {
-               if(persistent)
-                       container.activate(this, 1);
                synchronized(this) {
                        if(finished) return;
                        finished = true;

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2008-06-26 00:35:41 UTC (rev 20730)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2008-06-26 00:45:18 UTC (rev 20731)
@@ -544,8 +544,10 @@
                        finished = true;
                        toThrow = ex;
                }
-               if(persistent)
+               if(persistent) {
+                       container.activate(parent, 1);
                        container.set(this);
+               }
                parent.segmentFinished(this, container, context);
        }

@@ -558,8 +560,10 @@
                        finished = true;
                        toThrow = InsertException.construct(errors);
                }
-               if(persistent)
+               if(persistent) {
                        container.set(this);
+                       container.activate(parent, 1);
+               }
                parent.segmentFinished(this, container, context);
        }

@@ -643,6 +647,8 @@
                if (total == -1)
                        return;
                if (total == dataBlockInserters.length) {
+                       if(persistent)
+                               container.activate(parent, 1);
                        parent.segmentFetchable(this, container);
                }
                if (total != dataBlockInserters.length + 
checkBlockInserters.length)
@@ -748,6 +754,8 @@
                                sbi.cancel(container, context);
                        Bucket d = dataBlocks[i];
                        if (d != null) {
+                               if(persistent)
+                                       container.activate(d, 5);
                                d.free();
                                dataBlocks[i] = null;
                        }
@@ -758,12 +766,16 @@
                                sbi.cancel(container, context);
                        Bucket d = checkBlocks[i];
                        if (d != null) {
+                               if(persistent)
+                                       container.activate(d, 5);
                                d.free();
                                checkBlocks[i] = null;
                        }
                }
-               if(persistent)
+               if(persistent) {
                        container.set(this);
+                       container.activate(parent, 1);
+               }
                parent.segmentFinished(this, container, context);
        }



Reply via email to