wake earlier-than-expected bug
authorVictor Grishchenko (mughal) <victor.grishchenko@gmail.com>
Wed, 17 Feb 2010 13:24:21 +0000 (14:24 +0100)
committerVictor Grishchenko (mughal) <victor.grishchenko@gmail.com>
Wed, 17 Feb 2010 13:24:21 +0000 (14:24 +0100)
exec/leecher.cpp
sendrecv.cpp

index b471188..3a2b65f 100644 (file)
@@ -43,7 +43,10 @@ int main (int argn, char** args) {
     else
         bindaddr = Address((uint32_t)INADDR_ANY,rand()%10000+7000);
 
-    assert(0<swift::Listen(bindaddr));
+    if (swift::Listen(bindaddr)<=0) {
+        fprintf(stderr,"Cannot listen on %s\n",bindaddr.str());
+        return -3;
+    }
 
        swift::SetTracker(tracker);
 
index 6a56bce..04d8d12 100644 (file)
@@ -183,7 +183,8 @@ bin64_t        Channel::AddData (Datagram& dgram) {
         return bin64_t::NONE;
     
     bin64_t tosend = bin64_t::NONE;
-    if (data_out_.size()<cwnd_ && last_data_out_time_<=NOW-send_interval_) {
+    tint luft = send_interval_>>2; // may wake up a bit earlier
+    if (data_out_.size()<cwnd_ && last_data_out_time_+send_interval_+luft<=NOW) {
         tosend = DequeueHint();
         if (tosend==bin64_t::NONE) {
             dprintf("%s #%u no idea what to send #sendctrl\n",tintstr(),id_);
@@ -191,7 +192,8 @@ bin64_t        Channel::AddData (Datagram& dgram) {
                 SwitchSendControl(KEEP_ALIVE_CONTROL);
         }
     } else
-        dprintf("%s #%u no cwnd #sendctrl\n",tintstr(),id_);
+        dprintf("%s #%u sendctrl wait cwnd %f data_out %i next %s\n",
+                tintstr(),id_,cwnd_,data_out_.size(),tintstr(last_data_out_time_+NOW-send_interval_));
     
     if (tosend==bin64_t::NONE)// && (last_data_out_time_>NOW-TINT_SEC || data_out_.empty())) 
         return bin64_t::NONE; // once in a while, empty data is sent just to check rtt FIXED