Force APR pools to always call free(3) when memory gets released.
Index: memory/unix/apr_pools.c
--- memory/unix/apr_pools.c.orig
+++ memory/unix/apr_pools.c
@@ -127,8 +127,8 @@ struct apr_allocator_t {
     apr_size_t        max_index;
     /** Total size (in BOUNDARY_SIZE multiples) of unused memory before
      * blocks are given back. @see apr_allocator_max_free_set().
-     * @note Initialized to APR_ALLOCATOR_MAX_FREE_UNLIMITED,
-     * which means to never give back blocks.
+     * @note Initialized to APR_ALLOCATOR_MAX_FREE_DEFAULT,
+     * which by default means to never give back blocks.
      */
     apr_size_t        max_free_index;
     /**
@@ -188,7 +188,7 @@ APR_DECLARE(apr_status_t) apr_allocator_create(apr_all
         return APR_ENOMEM;
 
     memset(new_allocator, 0, SIZEOF_ALLOCATOR_T);
-    new_allocator->max_free_index = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
+    new_allocator->max_free_index = APR_ALLOCATOR_MAX_FREE_DEFAULT;
 
     *allocator = new_allocator;
 
@@ -244,6 +244,7 @@ APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_
 APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator,
                                              apr_size_t in_size)
 {
+#ifndef __OpenBSD__
     apr_size_t max_free_index;
     apr_size_t size = in_size;
 
@@ -257,6 +258,7 @@ APR_DECLARE(void) apr_allocator_max_free_set(apr_alloc
         allocator->current_free_index = max_free_index;
 
     allocator_unlock(allocator);
+#endif // __OpenBSD__
 }
 
 static APR_INLINE
@@ -1155,7 +1157,7 @@ APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex
             return APR_ENOMEM;
         }
         memset(pool_allocator, 0, SIZEOF_ALLOCATOR_T);
-        pool_allocator->max_free_index = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
+        pool_allocator->max_free_index = APR_ALLOCATOR_MAX_FREE_DEFAULT;
     }
     if ((node = allocator_alloc(pool_allocator,
                                 MIN_ALLOC - APR_MEMNODE_T_SIZE)) == NULL) {
