- Merge in some (as-yet-unused) IPv6 address manipulation code. (Patch
from croup.)
+ o Performance improvements:
+ - Be more aggressive with freeing buffer RAM or putting it on the
+ free lists.
+
o Performance improvements (win32):
- Use Critical Sections rather than Mutexes for synchronizing threads
on win32; Mutexes are heavier-weight, and designed for synchronizing
void
buf_shrink_freelists(int free_all)
{
- int j;
- for (j = 0; j < 2; ++j) {
- free_mem_list_t *list = j ? &free_mem_list_16k : &free_mem_list_4k;
+ int list_elt_size;
+ for (list_elt_size = 4096; list_elt_size <= 16384; list_elt_size *= 2) {
+ free_mem_list_t *list = get_free_mem_list(list_elt_size);
if (list->lowwater > list->slack || free_all) {
int i, n_to_skip, n_to_free;
char **ptr;
size_t new_len;
new_len = buf->len;
- if (buf->datalen == 0 && buf->highwater == 0 &&
+ /* Actually, we ignore highwater here if we're going to throw it on the
+ * freelist, since it's way cheaper to use the freelist than to use (some)
+ * platform mallocs.
+ *
+ * DOCDOC If it turns out to be a good idea, add it to the doxygen for this
+ * function.
+ */
+ if (buf->datalen == 0 && // buf->highwater == 0 &&
IS_FREELIST_SIZE(buf->len)) {
+ buf->highwater = 0;
if (add_buf_mem_to_freelist(buf))
return;
}