diff options
Diffstat (limited to 'src/or/buffers.c')
-rw-r--r-- | src/or/buffers.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/or/buffers.c b/src/or/buffers.c index 00db5d0916..cdab5490d0 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -258,6 +258,7 @@ buf_shrink_freelists(int free_all) int n_to_free = free_all ? freelists[i].cur_length : (freelists[i].lowest_length - slack); int n_to_skip = freelists[i].cur_length - n_to_free; + int orig_n_to_free = n_to_free, n_freed=0; int new_length = n_to_skip; chunk_t **chp = &freelists[i].head; chunk_t *chunk; @@ -276,9 +277,19 @@ buf_shrink_freelists(int free_all) tor_free(chunk); chunk = next; --n_to_free; + ++n_freed; ++freelists[i].n_free; } - tor_assert(!n_to_free); + if (n_to_free) { + log_warn(LD_BUG, "Freelist length for %d-byte chunks may have been " + "messed up somehow.", (int)freelists[i].alloc_size); + log_warn(LD_BUG, "There were %d chunks at the start. I decided to " + "keep %d. I wanted to free %d. I freed %d. I somehow think " + "I have %d left to free.", + freelists[i].cur_length, n_to_skip, orig_n_to_free, + n_freed, n_to_free); + } + // tor_assert(!n_to_free); freelists[i].cur_length = new_length; } freelists[i].lowest_length = freelists[i].cur_length; |