Author: toad
Date: 2008-06-26 14:42:04 +0000 (Thu, 26 Jun 2008)
New Revision: 20739

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
Log:
Deactivation. (Mostly of parent)
On cancel(), remove the buckets from the database.
Pass parent into finish() so callers get to activate and deactivate it: Private 
methods generally shouldn't have to do this.

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2008-06-26 13:18:47 UTC (rev 20738)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2008-06-26 14:42:04 UTC (rev 20739)
@@ -469,10 +469,12 @@
                if (fetchable)
                        parent.segmentFetchable(this, container);
                if (fin)
-                       finish(container, context);
+                       finish(container, context, parent);
                if (finished) {
                        parent.segmentFinished(this, container, context);
                }
+               if(persistent)
+                       container.deactivate(parent, 1);
        }

        public void onDecodedSegment(ObjectContainer container, ClientContext 
context, FECJob job, Bucket[] dataBuckets, Bucket[] checkBuckets, 
SplitfileBlock[] dataBlockStatus, SplitfileBlock[] checkBlockStatus) {} // 
irrevelant
@@ -507,7 +509,9 @@
                        Logger.error(this, "Caught " + t + " while encoding " + 
this, t);
                        InsertException ex = new InsertException(
                                        InsertException.INTERNAL_ERROR, t, 
null);
-                       finish(ex, container, context);
+                       finish(ex, container, context, parent);
+                       if(persistent)
+                               container.deactivate(parent, 1);
                        return;
                }

@@ -531,11 +535,20 @@
                        }
                }

-               if(persistent)
+               if(persistent) {
                        container.set(this);
+                       container.deactivate(parent, 1);
+               }
        }

-       private void finish(InsertException ex, ObjectContainer container, 
ClientContext context) {
+       /**
+        * Caller must activate and pass in parent.
+        * @param ex
+        * @param container
+        * @param context
+        * @param parent
+        */
+       private void finish(InsertException ex, ObjectContainer container, 
ClientContext context, SplitFileInserter parent) {
                if (logMINOR)
                        Logger.minor(this, "Finishing " + this + " with " + ex, 
ex);
                synchronized (this) {
@@ -545,13 +558,18 @@
                        toThrow = ex;
                }
                if(persistent) {
-                       container.activate(parent, 1);
                        container.set(this);
                }
                parent.segmentFinished(this, container, context);
        }

-       private void finish(ObjectContainer container, ClientContext context) {
+       /**
+        * Caller must activate and pass in parent.
+        * @param container
+        * @param context
+        * @param parent
+        */
+       private void finish(ObjectContainer container, ClientContext context, 
SplitFileInserter parent) {
                if(persistent)
                        container.activate(errors, 5);
                synchronized (this) {
@@ -562,7 +580,6 @@
                }
                if(persistent) {
                        container.set(this);
-                       container.activate(parent, 1);
                }
                parent.segmentFinished(this, container, context);
        }
@@ -610,6 +627,8 @@
                        container.set(this);
                }
                parent.segmentHasURIs(this, container, context);
+               if(persistent)
+                       container.deactivate(parent, 1);
        }

        public void onSuccess(ClientPutState state, ObjectContainer container, 
ClientContext context) {
@@ -624,6 +643,10 @@
                SingleBlockInserter sbi = (SingleBlockInserter) state;
                int x = sbi.token;
                completed(x, container, context);
+               if(persistent) {
+                       container.deactivate(parent.parent, 1);
+                       container.deactivate(parent, 1);
+               }
        }

        public void onFailure(InsertException e, ClientPutState state, 
ObjectContainer container, ClientContext context) {
@@ -640,6 +663,11 @@
                int x = sbi.token;
                errors.merge(e);
                completed(x, container, context);
+               if(persistent) {
+                       container.deactivate(parent.parent, 1);
+                       container.deactivate(parent, 1);
+                       container.deactivate(errors, 1);
+               }
        }

        private void completed(int x, ObjectContainer container, ClientContext 
context) {
@@ -655,7 +683,7 @@
                        return;
                if(persistent)
                        container.set(this);
-               finish(container, context);
+               finish(container, context, parent);
        }

        /**
@@ -757,6 +785,7 @@
                                if(persistent)
                                        container.activate(d, 5);
                                d.free();
+                               d.removeFrom(container);
                                dataBlocks[i] = null;
                        }
                }
@@ -769,6 +798,7 @@
                                if(persistent)
                                        container.activate(d, 5);
                                d.free();
+                               d.removeFrom(container);
                                checkBlocks[i] = null;
                        }
                }


Reply via email to