Просмотр исходного кода

PacketCopier, FragmentProtoDisassembler: always call Done for input and output in the same order, giving priority to output

ambrop7 15 лет назад
Родитель
Сommit
5bf73c9771
2 измененных файлов с 8 добавлено и 8 удалено
  1. 5 5
      flow/FragmentProtoDisassembler.c
  2. 3 3
      flow/PacketCopier.c

+ 5 - 5
flow/FragmentProtoDisassembler.c

@@ -162,15 +162,15 @@ static void output_handler_recv (FragmentProtoDisassembler *o, uint8_t *data)
     // write input to output
     write_chunks(o);
     
-    // finish output packet if needed
-    if (!o->out) {
-        PacketRecvInterface_Done(&o->output, o->out_used);
-    }
-    
     // finish input packet if needed
     if (o->in_len == -1) {
         PacketPassInterface_Done(&o->input);
     }
+    
+    // finish output packet if needed
+    if (!o->out) {
+        PacketRecvInterface_Done(&o->output, o->out_used);
+    }
 }
 
 static void timer_handler (FragmentProtoDisassembler *o)

+ 3 - 3
flow/PacketCopier.c

@@ -71,12 +71,12 @@ static void output_handler_recv (PacketCopier *o, uint8_t *data)
     
     memcpy(data, o->in, o->in_len);
     
-    // finish output packet
-    PacketRecvInterface_Done(&o->output, o->in_len);
-    
     // finish input packet
     PacketPassInterface_Done(&o->input);
     
+    // finish output packet
+    PacketRecvInterface_Done(&o->output, o->in_len);
+    
     o->in_len = -1;
 }