Author: toad
Date: 2007-07-09 20:30:17 +0000 (Mon, 09 Jul 2007)
New Revision: 14005

Modified:
   trunk/freenet/src/freenet/node/InsertHandler.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeClientCore.java
   trunk/freenet/src/freenet/node/NodeDispatcher.java
   trunk/freenet/src/freenet/node/RequestHandler.java
   trunk/freenet/src/freenet/node/SSKInsertHandler.java
Log:
Fix spurious IllegalStateException when requests succeed from datastore or 
otherwise don't need to lock a UID

Modified: trunk/freenet/src/freenet/node/InsertHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertHandler.java   2007-07-09 16:21:13 UTC 
(rev 14004)
+++ trunk/freenet/src/freenet/node/InsertHandler.java   2007-07-09 20:30:17 UTC 
(rev 14005)
@@ -79,7 +79,7 @@
             Logger.error(this, "Caught in run() "+t, t);
         } finally {
                if(logMINOR) Logger.minor(this, "Exiting InsertHandler.run() 
for "+uid);
-            node.unlockUID(uid, false, true);
+            node.unlockUID(uid, false, true, false);
         }
     }


Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-07-09 16:21:13 UTC (rev 
14004)
+++ trunk/freenet/src/freenet/node/Node.java    2007-07-09 20:30:17 UTC (rev 
14005)
@@ -1960,7 +1960,7 @@
                }
        }

-       public void unlockUID(long uid, boolean ssk, boolean insert) {
+       public void unlockUID(long uid, boolean ssk, boolean insert, boolean 
canFail) {
                if(logMINOR) Logger.minor(this, "Unlocking "+uid);
                Long l = new Long(uid);
                completed(uid);
@@ -1969,7 +1969,7 @@
                        set.remove(l);
                }
                synchronized(runningUIDs) {
-                       if(!runningUIDs.remove(l))
+                       if(!runningUIDs.remove(l) && !canFail)
                                throw new IllegalStateException("Could not 
unlock "+uid+ '!');
                }
        }

Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java  2007-07-09 16:21:13 UTC 
(rev 14004)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java  2007-07-09 20:30:17 UTC 
(rev 14005)
@@ -479,7 +479,6 @@
                Object o = node.makeRequestSender(key.getNodeCHK(), 
node.maxHTL(), uid, null, node.getLocation(), false, localOnly, cache, 
ignoreStore);
                if(o instanceof CHKBlock) {
                        try {
-                               node.unlockUID(uid, false, false);
                                return new ClientCHKBlock((CHKBlock)o, key);
                        } catch (CHKVerifyException e) {
                                Logger.error(this, "Does not verify: "+e, e);
@@ -574,7 +573,7 @@
                        }
                }
                } finally {
-                       node.unlockUID(uid, false, false);
+                       node.unlockUID(uid, false, false, true);
                }
        }

@@ -592,7 +591,6 @@
                        try {
                                SSKBlock block = (SSKBlock)o;
                                key.setPublicKey(block.getPubKey());
-                               node.unlockUID(uid, true, false);
                                return ClientSSKBlock.construct(block, key);
                        } catch (SSKVerifyException e) {
                                Logger.error(this, "Does not verify: "+e, e);
@@ -686,7 +684,7 @@
                        }
                }
                } finally {
-                       node.unlockUID(uid, true, false);
+                       node.unlockUID(uid, true, false, true);
                }
        }

@@ -814,7 +812,7 @@
                        }
                }
                } finally {
-                       node.unlockUID(uid, false, true);
+                       node.unlockUID(uid, false, true, true);
                }
        }

@@ -940,7 +938,7 @@
                        }
                }
                } finally {
-                       node.unlockUID(uid, true, true);
+                       node.unlockUID(uid, true, true, true);
                }
        }


Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeDispatcher.java  2007-07-09 16:21:13 UTC 
(rev 14004)
+++ trunk/freenet/src/freenet/node/NodeDispatcher.java  2007-07-09 20:30:17 UTC 
(rev 14005)
@@ -186,7 +186,7 @@
                        } catch (NotConnectedException e) {
                                Logger.normal(this, "Rejecting (overload) data 
request from "+m.getSource().getPeer()+": "+e);
                        }
-                       node.unlockUID(id, isSSK, false);
+                       node.unlockUID(id, isSSK, false, false);
                        return true;
                }
                //if(!node.lockUID(id)) return false;
@@ -228,7 +228,7 @@
                        } catch (NotConnectedException e) {
                                Logger.normal(this, "Rejecting (overload) 
insert request from "+m.getSource().getPeer()+": "+e);
                        }
-                       node.unlockUID(id, isSSK, true);
+                       node.unlockUID(id, isSSK, true, false);
                        return true;
                }
                long now = System.currentTimeMillis();

Modified: trunk/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestHandler.java  2007-07-09 16:21:13 UTC 
(rev 14004)
+++ trunk/freenet/src/freenet/node/RequestHandler.java  2007-07-09 20:30:17 UTC 
(rev 14005)
@@ -203,7 +203,7 @@
             thrown = true;
         } finally {
                node.removeTransferringRequestHandler(uid);
-            node.unlockUID(uid, key instanceof NodeSSK, false);
+            node.unlockUID(uid, key instanceof NodeSSK, false, false);
             if((!finalTransferFailed) && rs != null && status != 
RequestSender.TIMED_OUT && status != RequestSender.GENERATED_REJECTED_OVERLOAD 
                        && status != RequestSender.INTERNAL_ERROR && !thrown) {
                int sent, rcvd;

Modified: trunk/freenet/src/freenet/node/SSKInsertHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/SSKInsertHandler.java        2007-07-09 
16:21:13 UTC (rev 14004)
+++ trunk/freenet/src/freenet/node/SSKInsertHandler.java        2007-07-09 
20:30:17 UTC (rev 14005)
@@ -83,7 +83,7 @@
             Logger.error(this, "Caught "+t, t);
         } finally {
             if(logMINOR) Logger.minor(this, "Exiting InsertHandler.run() for 
"+uid);
-            node.unlockUID(uid, true, true);
+            node.unlockUID(uid, true, true, false);
         }
     }



Reply via email to