Author: toad
Date: 2008-07-17 21:31:59 +0000 (Thu, 17 Jul 2008)
New Revision: 21186

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
   
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
Deactivation, some activation

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-07-17 21:29:31 UTC (rev 21185)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-07-17 21:31:59 UTC (rev 21186)
@@ -325,7 +325,7 @@
                                        try {
                                                maybeAddToBinaryBlob(data, i, 
false, container, context);
                                        } catch (FetchException e) {
-                                               fail(e, container, context);
+                                               fail(e, container, context, 
false);
                                                return;
                                        }
                                }
@@ -372,6 +372,11 @@

                        codec.addToQueue(new FECJob(codec, context.fecQueue, 
dataBuckets, checkBuckets, 32768, 
context.getBucketFactory(parentFetcher.parent.persistent()), this, false, 
parentFetcher.parent.getPriorityClass(), parentFetcher.parent.persistent()),
                                        context.fecQueue, container);
+               if(persistent) {
+                       container.deactivate(parentFetcher, 1);
+                       container.deactivate(parentFetcher.parent, 1);
+                       container.deactivate(context, 1);
+               }
        }

        public void onEncodedSegment(ObjectContainer container, ClientContext 
context, FECJob job, Bucket[] dataBuckets2, Bucket[] checkBuckets2, 
SplitfileBlock[] dataBlockStatus, SplitfileBlock[] checkBlockStatus) {
@@ -409,7 +414,7 @@
                                try {
                                        maybeAddToBinaryBlob(data, i, true, 
container, context);
                                } catch (FetchException e) {
-                                       fail(e, container, context);
+                                       fail(e, container, context, false);
                                        return;
                                }
                                if(checkRetries[i] > 0)
@@ -425,11 +430,15 @@
                }
                if(persistent) {
                        container.set(this);
-                       container.activate(parentFetcher, 1);
                }
                // Defer the completion until we have generated healing blocks 
if we are collecting binary blobs.
-               if(isCollectingBinaryBlob())
+               if(isCollectingBinaryBlob()) {
+                       if(persistent)
+                               container.activate(parentFetcher, 1);
                        
parentFetcher.segmentFinished(SplitFileFetcherSegment.this, container, context);
+                       if(persistent)
+                               container.deactivate(parentFetcher, 1);
+               }
        }

        boolean isCollectingBinaryBlob() {
@@ -505,7 +514,7 @@
                if(persistent)
                        container.set(this);
                if(allFailed)
-                       fail(new FetchException(FetchException.SPLITFILE_ERROR, 
errors), container, context);
+                       fail(new FetchException(FetchException.SPLITFILE_ERROR, 
errors), container, context, false);
                else if(seg != null)
                        seg.possiblyRemoveFromParent(container);
        }
@@ -606,7 +615,7 @@
                return sub;
        }

-       void fail(FetchException e, ObjectContainer container, ClientContext 
context) {
+       void fail(FetchException e, ObjectContainer container, ClientContext 
context, boolean dontDeactivateParent) {
                synchronized(this) {
                        if(finished) return;
                        finished = true;
@@ -643,6 +652,8 @@
                        container.activate(parentFetcher, 1);
                }
                parentFetcher.segmentFinished(this, container, context);
+               if(!dontDeactivateParent)
+                       container.deactivate(parentFetcher, 1);
        }

        public void schedule(ObjectContainer container, ClientContext context, 
boolean regmeOnly) {
@@ -659,6 +670,8 @@
                                seg.add(i, true, container, context, false);

                        seg.schedule(container, context, true, regmeOnly);
+                       if(persistent)
+                               container.deactivate(seg, 1);
                        synchronized(this) {
                                scheduled = true;
                        }
@@ -668,12 +681,12 @@
                                Logger.minor(this, "scheduling "+seg+" : 
"+seg.blockNums);
                } catch (Throwable t) {
                        Logger.error(this, "Caught "+t+" scheduling "+this, t);
-                       fail(new FetchException(FetchException.INTERNAL_ERROR, 
t), container, context);
+                       fail(new FetchException(FetchException.INTERNAL_ERROR, 
t), container, context, true);
                }
        }

        public void cancel(ObjectContainer container, ClientContext context) {
-               fail(new FetchException(FetchException.CANCELLED), container, 
context);
+               fail(new FetchException(FetchException.CANCELLED), container, 
context, true);
        }

        public void onBlockSetFinished(ClientGetState state) {
@@ -832,15 +845,23 @@
                                SplitFileFetcherSubSegment sub = 
(SplitFileFetcherSubSegment) v.get(i);
                                RandomGrabArray rga = sub.getParentGrabArray();
                                if(sub.getParentGrabArray() == null) {
+                                       if(persistent)
+                                               container.activate(sub, 1);
                                        sub.schedule(container, context, false, 
false);
+                                       if(persistent)
+                                               container.deactivate(sub, 1);
                                } else {
 //                                     if(logMINOR) {
-                                               container.activate(rga, 1);
+                                               if(persistent)
+                                                       container.activate(rga, 
1);
                                                if(!rga.contains(sub, 
container)) {
                                                        Logger.error(this, 
"Sub-segment has RGA but isn't registered to it!!: "+sub+" for "+rga);
                                                        sub.schedule(container, 
context, false, false);
+                                                       if(persistent)
+                                                               
container.deactivate(sub, 1);
                                                }
-                                               container.deactivate(rga, 1);
+                                               if(persistent)
+                                                       
container.deactivate(rga, 1);
 //                                     }
                                }
                        }
@@ -923,7 +944,7 @@
                }
                if(persistent)
                        container.activate(this, 1);
-               this.fail(new FetchException(FetchException.INTERNAL_ERROR, 
"FEC failure: "+t, t), container, context);
+               this.fail(new FetchException(FetchException.INTERNAL_ERROR, 
"FEC failure: "+t, t), container, context, false);
        }

        public boolean haveBlock(int blockNo, ObjectContainer container) {

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java  
    2008-07-17 21:29:31 UTC (rev 21185)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java  
    2008-07-17 21:31:59 UTC (rev 21186)
@@ -281,12 +281,17 @@
                }
                segment.errors.inc(e.getMode());
                if(e.isFatal() && token == null) {
-                       segment.fail(e, container, context);
+                       segment.fail(e, container, context, false);
                } else if(e.isFatal() || forceFatal) {
                        segment.onFatalFailure(e, ((Integer)token).intValue(), 
this, container, context);
                } else {
                        segment.onNonFatalFailure(e, 
((Integer)token).intValue(), this, container, context);
                }
+               if(persistent) {
+                       container.deactivate(segment, 1);
+                       container.deactivate(parent, 1);
+                       container.deactivate(segment.errors, 1);
+               }
        }

        public void onSuccess(ClientKeyBlock block, boolean fromStore, Object 
token, ObjectContainer container, ClientContext context) {
@@ -321,6 +326,10 @@
                } else {
                        onFailure(new 
FetchException(FetchException.INVALID_METADATA, "Metadata where expected 
data"), token, container, context);
                }
+               if(persistent) {
+                       container.deactivate(segment, 1);
+                       container.deactivate(blockNums, 1);
+               }
        }

        protected void onSuccess(Bucket data, boolean fromStore, Integer token, 
int blockNo, ClientKeyBlock block, ObjectContainer container, ClientContext 
context) {


Reply via email to