so while hacking up that patch to eliminate the block_freelist i thought i
could also get rid of the alloc_mutex entirely.  but it appears that
currently the pool code sort of supports multithreaded access to the same
pool.

i say "sort of" because cleanups don't support multithreaded access -- no
mutex there.  and cleanups of pools across threads sounds really ugly
(because we deliberately don't have async notification of threads).

but if you study the parent/child pool linking code (search for ->parent)
you'll see that whenever the parent pool is touched, it's done inside
alloc_mutex.

ages ago it was discussed that there would be a "root" pool per-thread --
and that a pool would be accessed by a single thread.  this would mean
that alloc_mutex wouldn't need to be aquired to touch the parent pool.

ok studying the mpm threaded.c code i see that we give each thread a
sub_pool of pchild.  but i think the following patch would be safe,
because each thread won't exit until it has done its own cleanup.

i haven't tested the patch though... what do people think?

(the real testing would include removing the alloc_mutex from apr_pools.c
code which accesses p->parent.)

-dean

Index: threaded.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/mpm/threaded/threaded.c,v
retrieving revision 1.44
diff -u -r1.44 threaded.c
--- threaded.c  2001/07/03 13:58:10     1.44
+++ threaded.c  2001/07/08 18:32:50
@@ -697,7 +697,9 @@
            my_info->pid = my_child_num;
             my_info->tid = i;
            my_info->sd = 0;
-           apr_pool_create(&my_info->tpool, pchild);
+
+           /* each thread needs its own private pool tree */
+           apr_pool_create(&my_info->tpool, NULL);

            /* We are creating threads right now */
            (void) ap_update_child_status(my_child_num, i, SERVER_STARTING,

Reply via email to