apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Вадим Лазовский <...@citylink-rk.ru>
Subject apr_pool_destroy thread-safety
Date Thu, 30 Aug 2012 08:33:33 GMT
Hello.

I'm writting multi-threaded event-driven scgi server using APR.
I've met some strange issues with apr_pool_destroy() function.

The programm works as follows:
1. main() function creates root memory pool and several threads.
2. Each thread has it's own pool created from common parent at point 1.
3. Listening socket is shared between threads. accept() is locked with 
mutex.
4. Each thread is running event loop using apr_poll functions.
5. For each request handled by the server a new memory pool is created. 
The parent of this pool is thread pool. (from point 2).
6. When request completes, request pool is destroyed.

When number of threads is greater than 1 and high concurency issued 
while tests (100 or more concurent connections, about 7000 r/s) i'm 
observing unpredictable behaviour such as segfaults or callback function 
looping.

Two workarounds were found empirically:

1. Lock all threads before calling apr_pool_destroy() that destroys 
request pool; Release lock after.
2. Do not use parent memory pool (from point 1) while creating thread 
pools (at point 2). In other words - create root memory pool in each thread.

The question is:
Is apr_pool_destroy() fully thread-safe?



Mime
View raw message