Update of /cvsroot/freenet/freenet/src/freenet
In directory sc8-pr-cvs1:/tmp/cvs-serv15065/src/freenet

Modified Files:
      Tag: ngrouting
        ConnectionHandler.java Version.java 
Log Message:
7040: fix deadlock in ConnectionHandler. technically this should be on the unstable 
branch, but since we're gonna merge soon anyway...



Index: ConnectionHandler.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/ConnectionHandler.java,v
retrieving revision 1.85.2.16
retrieving revision 1.85.2.17
diff -u -r1.85.2.16 -r1.85.2.17
--- ConnectionHandler.java      26 Aug 2003 01:57:19 -0000      1.85.2.16
+++ ConnectionHandler.java      28 Aug 2003 00:35:17 -0000      1.85.2.17
@@ -949,7 +949,9 @@
                        if (logDEBUG)Core.logger.log(this, "sendingQueue empty, 
trailingPresent "+trailingPresent,Logger.DEBUG);
                        currentSender=null;
                }*/
-               if (sendingQueue.size() >0) { // while because if one sfe's we need to 
go to next
+               boolean needTerminate = false; // don't terminate while holding locks!
+               if (sendingQueue.size() >0) { 
+                       // while because if one sfe's we need to go to next
                        int curPacketLength = 0;
                        synchronized(sentMessages) {
                                sentMessages.clear();
@@ -1036,26 +1038,31 @@
                                        }
                                        sendingCount = 0;
                                        if(receiveClosed.state() && receivingCount == 
0) {
-                                               terminate();
+                                               needTerminate = true;
                                        }
                                } catch (Throwable e) {
                                        Core.logger.log(this, "Caught "+e+" sending 
block", e,
                                                                        Logger.ERROR);
-                                       terminate();
+                                       needTerminate = true;
+                               }
+                               if(!needTerminate) {
+                                       // We have sent a packet. Yay.
+                                       Core.logger.log(this, "Sent packet of size "+
+                                                                       
curPacketLength+" containing "+
+                                                                       
sentMessages.size()+" messages on "+
+                                                                       this, 
Logger.MINOR);
                                }
-                               // We have sent a packet. Yay.
-                               Core.logger.log(this, "Sent packet of size 
"+curPacketLength+
-                                                               " containing 
"+sentMessages.size()+" messages on "+
-                                                               this, Logger.MINOR);
-                               
Core.diagnostics.occurrenceContinuous("messagePacketSizeSent",
-                                                                                      
                   curPacketLength);
-                               
Core.diagnostics.occurrenceContinuous("messagesInPacketSent",
-                                                                                      
                   sentMessages.size());
                        }
+                       Core.diagnostics.occurrenceContinuous("messagePacketSizeSent",
+                                                                                      
           curPacketLength);
+                       Core.diagnostics.occurrenceContinuous("messagesInPacketSent",
+                                                                                      
           sentMessages.size());
                }
-               
-               if (logDEBUG) Core.logger.log(this,"exiting CH.jobDone(), size of 
sendQueue "+sendingQueue.size()+
-                                               " trailingPresent 
"+trailingPresent,Logger.DEBUG);      
+               if(needTerminate) terminate();
+               if (logDEBUG) Core.logger.log(this,"exiting CH.jobDone(), size "+
+                                                                         "of 
sendQueue "+sendingQueue.size()+
+                                                                         " 
trailingPresent "+trailingPresent,
+                                                                         
Logger.DEBUG);
                
        }
     

Index: Version.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/Version.java,v
retrieving revision 1.307.2.39
retrieving revision 1.307.2.40
diff -u -r1.307.2.39 -r1.307.2.40
--- Version.java        27 Aug 2003 15:54:35 -0000      1.307.2.39
+++ Version.java        28 Aug 2003 00:35:18 -0000      1.307.2.40
@@ -18,7 +18,7 @@
     public static String protocolVersion = "1.46";
     
     /** The build number of the current revision */
-    public static final int buildNumber = 7039;
+    public static final int buildNumber = 7040;
     // 6028: may 3; ARK retrieval fix
 
     public static final int ignoreBuildsAfter = 6500;

_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to