Browse Source

Make --disable-buf-freelists build and pass unit tests

Andrea Shepard 10 years ago
parent
commit
91ff10f6be
2 changed files with 14 additions and 5 deletions
  1. 3 3
      src/or/buffers.c
  2. 11 2
      src/test/test_buffers.c

+ 3 - 3
src/or/buffers.c

@@ -117,6 +117,9 @@ chunk_repack(chunk_t *chunk)
   chunk->data = &chunk->mem[0];
 }
 
+/** Keep track of total size of allocated chunks for consistency asserts */
+static size_t total_bytes_allocated_in_chunks = 0;
+
 #if defined(ENABLE_BUF_FREELISTS) || defined(RUNNING_DOXYGEN)
 /** A freelist of chunks. */
 typedef struct chunk_freelist_t {
@@ -148,9 +151,6 @@ static chunk_freelist_t freelists[] = {
  * could help with? */
 static uint64_t n_freelist_miss = 0;
 
-/** DOCDOC */
-static size_t total_bytes_allocated_in_chunks = 0;
-
 static void assert_freelist_ok(chunk_freelist_t *fl);
 
 /** Return the freelist to hold chunks of size <b>alloc</b>, or NULL if

+ 11 - 2
src/test/test_buffers.c

@@ -481,13 +481,22 @@ test_buffer_allocation_tracking(void *arg)
   fetch_from_buf(junk, 4096, buf1); /* drop a 1k chunk... */
   tt_int_op(buf_allocation(buf1), ==, 3*4096); /* now 3 4k chunks */
 
+#ifdef ENABLE_BUF_FREELISTS
   tt_int_op(buf_get_total_allocation(), ==, 16384); /* that chunk went onto
                                                        the freelist. */
+#else
+  tt_int_op(buf_get_total_allocation(), ==, 12288); /* that chunk was really
+                                                       freed. */
+#endif
 
   write_to_buf(junk, 4000, buf2);
   tt_int_op(buf_allocation(buf2), ==, 4096); /* another 4k chunk. */
-  tt_int_op(buf_get_total_allocation(), ==, 16384); /* that chunk came from
-                                                       the freelist. */
+  /*
+   * If we're using freelists, size stays at 16384 because we just pulled a
+   * chunk from the freelist.  If we aren't, we bounce back up to 16384 by
+   * allocating a new chunk.
+   */
+  tt_int_op(buf_get_total_allocation(), ==, 16384);
   write_to_buf(junk, 4000, buf2);
   tt_int_op(buf_allocation(buf2), ==, 8192); /* another 4k chunk. */
   tt_int_op(buf_get_total_allocation(), ==, 5*4096); /* that chunk was new. */