Hi,

After debugging with valgrind, it looks like I have some pool related race
condition in my multithreaded apr code where I have a thread-pool with
multiple workers. Files and sockets are passed to the worker threads for
processing. 
As far as I understand apr_palloc and apr_pool_destory can not be called
from different threads.
Now my problem is that the socket and file API relies on pools, i.e.
I see no way to create sockets/files without the use of apr_pools. 

I was trying to debug my code with APR_POOL_DEBUG set to pool owner
check. This results in an abort as soon as the file/socket is passed to a
worker thread. The documentation suggests the use of
apr_pool_owner_set(), but I have not found this anywhere, except in this patch: 
http://mail-archives.apache.org/mod_mbox/apr-dev/200307.mbox/raw/%3c3f0da25b.4020...@cs.ucr.edu%3e

I didn't try this yet, though lets suppose I put apr_pool_owner_set() in
my code to places where there is no concurrent access to pool allocated
resources but only thread ownership change, and then it turns out that it
detects a real pool related race condition bug somewhere.
Then if I cannot rewrite the code, what other options are there?
I found this patch which adds thread safe pools:
https://issues.apache.org/bugzilla/show_bug.cgi?id=51392
This looks to be one possible solution, though the problem is that I will
be able to ship my program only with this patched apr statically linked
in.
Other solution would be to use dedicated mutex locks in the code for
each shared pool, but this feels a little awkward. If files/sockets could
be created with malloc instead, this issue would be a lot easier to solve.

Any hints or suggestions how others tackled this kind of problem?
Thanks in advance.

Regards,
Botond

Reply via email to