Author: toad
Date: 2006-07-11 13:10:40 +0000 (Tue, 11 Jul 2006)
New Revision: 9559

Modified:
   trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
Log:
nested locking is a root of all kinds of evils!

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutBase.java       2006-07-11 
12:56:47 UTC (rev 9558)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutBase.java       2006-07-11 
13:10:40 UTC (rev 9559)
@@ -163,17 +163,22 @@
                }
        }

-       private synchronized void 
trySendGeneratedURIMessage(FCPConnectionOutputHandler handler) {
-               FCPMessage msg = new URIGeneratedMessage(generatedURI, 
identifier);
+       private void trySendGeneratedURIMessage(FCPConnectionOutputHandler 
handler) {
+               FCPMessage msg;
+               synchronized(this) {
+                       msg = new URIGeneratedMessage(generatedURI, identifier);
+               }
                if(handler != null)
                        handler.queue(msg);
                else
                        client.queueClientRequestMessage(msg, 0);
        }

-       private synchronized void trySendProgressMessage(FCPMessage msg, int 
verbosity, FCPConnectionOutputHandler handler) {
-               if(persistenceType != PERSIST_CONNECTION)
-                       progressMessage = msg;
+       private void trySendProgressMessage(FCPMessage msg, int verbosity, 
FCPConnectionOutputHandler handler) {
+               synchronized(this) {
+                       if(persistenceType != PERSIST_CONNECTION)
+                               progressMessage = msg;
+               }
                if(handler != null)
                        handler.queue(msg);
                else
@@ -190,14 +195,20 @@
                        handler.queue(msg);
                }

+               boolean generated = false;
+               FCPMessage msg = null;
+               boolean fin = false;
                synchronized (this) {
-                       if(generatedURI != null)
-                               trySendGeneratedURIMessage(handler);
-                       if(progressMessage != null)
-                               handler.queue(progressMessage);
-                       if(finished)
-                               trySendFinalMessage(handler);
+                       generated = generatedURI != null;
+                       msg = progressMessage;
+                       fin = finished;
                }
+               if(generated)
+                       trySendGeneratedURIMessage(handler);
+               if(msg != null)
+                       handler.queue(msg);
+               if(fin)
+                       trySendFinalMessage(handler);
        }

        protected abstract FCPMessage persistentTagMessage();


Reply via email to