remvod verbose debugging in stream api; fixed warning in stream_big test case
[oweals/gnunet.git] / src / stream / stream_api.c
index 5d22ff7b3d6ca4dcc9eb2ab8e4ff7cc2ca4cf1a5..1dc1ba80e6c7ee959587aa9d2370ab238c4c0a4b 100644 (file)
@@ -943,11 +943,12 @@ call_read_processor (void *cls,
        GNUNET_i2s (&socket->other_peer), sequence_increase);
 
   /* Shift the data in the receive buffer */
-  memmove (socket->receive_buffer,
-           socket->receive_buffer 
-           + socket->receive_buffer_boundaries[sequence_increase-1],
-           socket->receive_buffer_size
-           - socket->receive_buffer_boundaries[sequence_increase-1]);
+  socket->receive_buffer = 
+    memmove (socket->receive_buffer,
+            socket->receive_buffer 
+            + socket->receive_buffer_boundaries[sequence_increase-1],
+            socket->receive_buffer_size
+            - socket->receive_buffer_boundaries[sequence_increase-1]);
   /* Shift the bitmap */
   socket->ack_bitmap = socket->ack_bitmap >> sequence_increase;
   /* Set read_sequence_number */
@@ -963,9 +964,18 @@ call_read_processor (void *cls,
   {
     if (packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH - sequence_increase)
     {
-      socket->receive_buffer_boundaries[packet] = 
-        socket->receive_buffer_boundaries[packet + sequence_increase] 
-        - offset_increase;
+      uint32_t ahead_buffer_boundary;
+
+      ahead_buffer_boundary = 
+       socket->receive_buffer_boundaries[packet + sequence_increase];
+      if (0 == ahead_buffer_boundary)
+       socket->receive_buffer_boundaries[packet] = 0;
+      else
+      {
+       GNUNET_assert (offset_increase < ahead_buffer_boundary);
+       socket->receive_buffer_boundaries[packet] = 
+         ahead_buffer_boundary - offset_increase;
+      }
     }
     else
       socket->receive_buffer_boundaries[packet] = 0;
@@ -2418,22 +2428,24 @@ handle_ack (struct GNUNET_STREAM_Socket *socket,
     }
     else      /* We have to call the write continuation callback now */
     {
+      struct GNUNET_STREAM_IOWriteHandle *write_handle;
+      
       /* Free the packets */
       for (packet=0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++)
       {
         GNUNET_free_non_null (socket->write_handle->messages[packet]);
       }
-      if (NULL != socket->write_handle->write_cont)
-        socket->write_handle->write_cont
-          (socket->write_handle->write_cont_cls,
-           socket->status,
-           socket->write_handle->size);
+      write_handle = socket->write_handle;
+      socket->write_handle = NULL;
+      if (NULL != write_handle->write_cont)
+        write_handle->write_cont (write_handle->write_cont_cls,
+                                 socket->status,
+                                 write_handle->size);
+      /* We are done with the write handle - Freeing it */
+      GNUNET_free (write_handle);
       LOG (GNUNET_ERROR_TYPE_DEBUG,
            "%s: Write completion callback completed\n",
-           GNUNET_i2s (&socket->other_peer));
-      /* We are done with the write handle - Freeing it */
-      GNUNET_free (socket->write_handle);
-      socket->write_handle = NULL;
+           GNUNET_i2s (&socket->other_peer));      
     }
     break;
   default: