We now pass the POOL_QALIGN flag to pool_create(). Also optimized
[rsync/rsync.git] / lib / pool_alloc.c
index 05b182c..0fb3122 100644 (file)
@@ -52,7 +52,7 @@ pool_create(size_t size, size_t quantum, void (*bomb)(const char *), int flags)
        pool->size = size       /* round extent size to min alignment reqs */
            ? (size + MINALIGN - 1) & ~(MINALIGN - 1)
            : POOL_DEF_EXTENT;
-       if (pool->flags & POOL_INTERN) {
+       if (flags & POOL_INTERN) {
                pool->size -= sizeof (struct pool_extent);
                flags |= POOL_APPEND;
        }
@@ -226,15 +226,9 @@ pool_free_old(alloc_pool_t p, void *addr)
        struct alloc_pool *pool = (struct alloc_pool *)p;
        struct pool_extent *cur, *prev, *next;
 
-       if (!pool)
+       if (!pool || !addr)
                return;
 
-       if (!addr) {
-               if (!pool->extents)
-                       return;
-               addr = PTR_ADD(pool->extents->start, pool->extents->free);
-       }
-
        for (prev = NULL, cur = pool->extents; cur; prev = cur, cur = cur->next) {
                if (addr >= cur->start
                    && addr < PTR_ADD(cur->start, pool->size))
@@ -261,6 +255,7 @@ pool_free_old(alloc_pool_t p, void *addr)
                                cur->free -= skew;
                        }
                        next = cur->next;
+                       cur->next = NULL;
                }
        } else {
                next = cur->next;