Author: robert
Date: 2008-01-10 16:40:27 +0000 (Thu, 10 Jan 2008)
New Revision: 16993

Modified:
   trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
Log:
simplify _senderThread


Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2008-01-10 
15:06:43 UTC (rev 16992)
+++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2008-01-10 
16:40:27 UTC (rev 16993)
@@ -81,61 +81,50 @@
                        public void run() {
                                while (!_sendComplete) {
                                        long startCycleTime = 
System.currentTimeMillis();
+                                       int packetNo;
                                        try {
-                                               while (true) {
-                                                       
synchronized(_senderThread) {
-                                                               
if(_unsent.size() != 0) {
-                                                                       
timeAllSent = -1;
-                                                                       break;
-                                                               }
-                                                               // No unsent 
packets
-                                                               if(getNumSent() 
== _prb.getNumPackets()) {
-                                                                       //No 
unreceived packets
-                                                                       
if(Logger.shouldLog(Logger.MINOR, this))
-                                                                               
Logger.minor(this, "Sent all blocks, none unsent");
-                                                                       
if(timeAllSent <= 0)
-                                                                               
timeAllSent = System.currentTimeMillis();
-                                                               }
+                                               synchronized(_senderThread) {
+                                                       while (_unsent.size() 
== 0) {
                                                                
if(_sendComplete) return;
                                                                
_senderThread.wait(10*1000);
                                                        }
-                                               }
-                                       } catch (InterruptedException e) {
-                                       } catch (AbortedException e) {
-                                               synchronized(_senderThread) {
-                                                       _sendComplete = true;
-                                                       
_senderThread.notifyAll();
-                                               }
-                                               return;
-                                       }
-                                       int packetNo;
-                                       try {
-                                               synchronized(_senderThread) {
                                                        packetNo = ((Integer) 
_unsent.removeFirst()).intValue();
                                                }
-                                       } catch (NoSuchElementException nsee) {
-                                               // back up to the top to check 
for completion
+                                       } catch (InterruptedException e) {
+                                               Logger.error(this, 
"_senderThread interrupted");
                                                continue;
                                        }
-                                       delay(startCycleTime);
-                                       if(_sendComplete) break;
-                                       _sentPackets.setBit(packetNo, true);
+                                       int totalPackets;
                                        try {
                                                
_destination.sendAsync(DMT.createPacketTransmit(_uid, packetNo, _sentPackets, 
_prb.getPacket(packetNo)), null, PACKET_SIZE, _ctr);
                                                _ctr.sentPayload(PACKET_SIZE);
+                                               
totalPackets=_prb.getNumPackets();
                                        } catch (NotConnectedException e) {
                                                Logger.normal(this, 
"Terminating send: "+e);
                                                synchronized(_senderThread) {
                                                        _sendComplete = true;
                                                        
_senderThread.notifyAll();
+                                                       return;
                                                }
                                        } catch (AbortedException e) {
                                                Logger.normal(this, 
"Terminating send due to abort: "+e);
                                                synchronized(_senderThread) {
                                                        _sendComplete = true;
                                                        
_senderThread.notifyAll();
+                                                       return;
                                                }
                                        }
+                                       synchronized (_senderThread) {
+                                               _sentPackets.setBit(packetNo, 
true);
+                                               if(_unsent.size() == 0 && 
getNumSent() == totalPackets) {
+                                                       //No unsent packets, no 
unreceived packets
+                                                       timeAllSent = 
System.currentTimeMillis();
+                                                       
if(Logger.shouldLog(Logger.MINOR, this))
+                                                               
Logger.minor(this, "Sent all blocks, none unsent");
+                                                       
_senderThread.notifyAll();
+                                               }
+                                       }
+                                       delay(startCycleTime);
                                }
                        }



Reply via email to