]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Make channel_flush_some_cells() compile cleanly on machines with ssize_t larger than...
authorAndrea Shepard <andrea@torproject.org>
Wed, 10 Oct 2012 07:19:57 +0000 (00:19 -0700)
committerAndrea Shepard <andrea@torproject.org>
Wed, 10 Oct 2012 07:44:47 +0000 (00:44 -0700)
src/or/channel.c

index 880fa63ca5ce4ee973e880c2784bcb431980a727..1ca5e1a333b7f1b1f21f70bd4b07f76568e671bb 100644 (file)
@@ -2018,7 +2018,7 @@ channel_flush_some_cells(channel_t *chan, ssize_t num_cells)
 {
   unsigned int unlimited = 0;
   ssize_t flushed = 0;
-  int num_cells_from_circs;
+  int num_cells_from_circs, clamped_num_cells;
 
   tor_assert(chan);
 
@@ -2033,12 +2033,20 @@ channel_flush_some_cells(channel_t *chan, ssize_t num_cells)
     if (!unlimited && num_cells <= flushed) goto done;
 
     if (circuitmux_num_cells(chan->cmux) > 0) {
+      /* Calculate number of cells, including clamp */
+      if (unlimited) {
+        clamped_num_cells = MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED;
+      } else {
+        if (num_cells - flushed >
+            MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED) {
+          clamped_num_cells = MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED;
+        } else {
+          clamped_num_cells = (int)(num_cells - flushed);
+        }
+      }
       /* Try to get more cells from any active circuits */
       num_cells_from_circs = channel_flush_from_first_active_circuit(
-          chan,
-          (unlimited ?
-             MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED :
-             (num_cells - flushed)));
+          chan, clamped_num_cells);
 
       /* If it claims we got some, process the queue again */
       if (num_cells_from_circs > 0) {