You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-user@logging.apache.org by Tim Jones <ti...@mr-dog.net> on 2007/06/26 19:23:37 UTC

Seg Fault in log4cxx::helpers::ObjectPtrT::operator=()...

Hi,

I'm getting a seg fault in
log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::operator=() when assigning a
NULL value to delete a reference to the logger.

The actual sig fault is here, in APR:

Thread [1] (Suspended: Signal 'SIGABRT' received. Description: Aborted.)
    13 __kernel_vsyscall()  0xffffe410
    12 raise()  0xb7ccddf0
    11 abort()  0xb7ccf641
    10 apr_atomic_casptr() apr_atomic.c:376 0x080fa69c
    9 log4cxx::helpers::ObjectPtrBase::exchange() objectptr.cpp:34
0x08071c2e
    8 ~ObjectPtrT() objectptr.h:74 0x0804de39
    7 ~ThreadSpecificData() ThreadsHelper.cpp:115 0x08055bb2

This only seems to happen when I'm deleting my own allocated APR pool within
a thread (a sub-pool of the roots), and then afterwards call the log4cxx
operator= as above to remove the reference to the logger.

If I don't call apr_pool_destroy on my thread local pool then I can remove
the loggers reference, but the pool never gets freed (as checked by building
apr with its pool debug stuff on).

Are there any guidelines for using both log4cxx and APR within the same app?
Or some pointers, examples, etc.?

Cheers,

Tim