Explorar o código

PacketBuffer: call Recv before calling Send, so that sending has priority over receiving (it's a LIFO...)

ambrop7 %!s(int64=15) %!d(string=hai) anos
pai
achega
4b25f9ad36
Modificáronse 1 ficheiros con 10 adicións e 10 borrados
  1. 10 10
      flow/PacketBuffer.c

+ 10 - 10
flow/PacketBuffer.c

@@ -41,15 +41,15 @@ void input_handler_done (PacketBuffer *buf, int in_len)
     // submit packet to buffer
     ChunkBuffer2_SubmitPacket(&buf->buf, in_len);
     
-    // if buffer was empty, schedule send
-    if (was_empty) {
-        PacketPassInterface_Sender_Send(buf->output, buf->buf.output_dest, buf->buf.output_avail);
-    }
-    
     // if there is space, schedule receive
     if (buf->buf.input_avail >= buf->input_mtu) {
         PacketRecvInterface_Receiver_Recv(buf->input, buf->buf.input_dest);
     }
+    
+    // if buffer was empty, schedule send
+    if (was_empty) {
+        PacketPassInterface_Sender_Send(buf->output, buf->buf.output_dest, buf->buf.output_avail);
+    }
 }
 
 void output_handler_done (PacketBuffer *buf)
@@ -62,15 +62,15 @@ void output_handler_done (PacketBuffer *buf)
     // remove packet from buffer
     ChunkBuffer2_ConsumePacket(&buf->buf);
     
-    // if there is more data, schedule send
-    if (buf->buf.output_avail >= 0) {
-        PacketPassInterface_Sender_Send(buf->output, buf->buf.output_dest, buf->buf.output_avail);
-    }
-    
     // if buffer was full and there is space, schedule receive
     if (was_full && buf->buf.input_avail >= buf->input_mtu) {
         PacketRecvInterface_Receiver_Recv(buf->input, buf->buf.input_dest);
     }
+    
+    // if there is more data, schedule send
+    if (buf->buf.output_avail >= 0) {
+        PacketPassInterface_Sender_Send(buf->output, buf->buf.output_dest, buf->buf.output_avail);
+    }
 }
 
 int PacketBuffer_Init (PacketBuffer *buf, PacketRecvInterface *input, PacketPassInterface *output, int num_packets, BPendingGroup *pg)