]> git.sesse.net Git - greproxy/blobdiff - reorderer.cpp
Make Reorderer handle multi-timeouts.
[greproxy] / reorderer.cpp
index 1fe3c08275ba859dbe8f6a3307e1e356ccc2d3a8..2533aadc042064a7577e55c45a56718ad04faa6f 100644 (file)
@@ -15,6 +15,21 @@ Reorderer::Reorderer(Sender* sender)
        gettimeofday(&last_sent_packet, NULL);
 }
 
+void Reorderer::possibly_adjust_tv(timeval *tv)
+{
+       if (packet_buffer.empty()) {
+               return;
+       }
+
+       timeval now;
+       gettimeofday(&now, NULL);
+       timeval tdiff = subtract_timeval_saturate(
+               offset_timeval_seconds(packet_buffer.top().ts, TIMEOUT_SEC), now);
+       if (less_than(tdiff, *tv)) {
+               *tv = tdiff;
+       }
+}
+
 void Reorderer::send_packet(uint16_t proto, const string& data, int seq)
 {
        timeval now;
@@ -32,8 +47,6 @@ void Reorderer::send_packet(uint16_t proto, const string& data, int seq)
                        last_seq + 1, packet_buffer.top().seq);
                silence = true;
                last_seq = packet_buffer.top().seq - 1;
-               // TODO: Rerun immediately after we've cleared out,
-               // in case there are more timeouts.
        }
 
        // In case of restarts.