Author: toad
Date: 2009-03-24 23:40:04 +0000 (Tue, 24 Mar 2009)
New Revision: 26167

Modified:
   branches/db4o/freenet/src/freenet/client/async/USKInserter.java
Log:
Store, reactivate where needed, don't cancel twice


Modified: branches/db4o/freenet/src/freenet/client/async/USKInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKInserter.java     
2009-03-24 23:28:16 UTC (rev 26166)
+++ branches/db4o/freenet/src/freenet/client/async/USKInserter.java     
2009-03-24 23:40:04 UTC (rev 26167)
@@ -254,22 +254,27 @@
 
        public void cancel(ObjectContainer container, ClientContext context) {
                USKFetcherTag tag;
+               boolean persist = persistent;
                synchronized(this) {
+                       if(finished) return;
+                       finished = true;
                        tag = fetcher;
                        fetcher = null;
                }
-               if(tag != null)
+               if(persistent) container.store(this);
+               if(tag != null) {
                        tag.cancel(container, context);
+                       if(persist) container.activate(this, 1); // May have 
been deactivated by callbacks
+               }
                if(sbi != null) {
                        sbi.cancel(container, context); // will call onFailure, 
which will removeFrom()
+                       if(persist) container.activate(this, 1); // May have 
been deactivated by callbacks
                }
-               synchronized(this) {
-                       finished = true;
-               }
                if(freeData) {
                        data.free();
                        if(persistent) data.removeFrom(container);
                }
+               if(persistent) container.activate(cb, 1);
                cb.onFailure(new InsertException(InsertException.CANCELLED), 
this, container, context);
        }
 
@@ -331,7 +336,7 @@
 
        public void removeFrom(ObjectContainer container, ClientContext 
context) {
                if(Logger.shouldLog(Logger.MINOR, this))
-                       Logger.minor(this, "Removing from database: "+this);
+                       Logger.minor(this, "Removing from database: "+this, new 
Exception("debug"));
                // parent will remove self
                if(freeData && data != null && container.ext().isStored(data)) {
                        try {

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

Reply via email to