On Dec 12, 2006, at 5:22 PM, Stephen Bartnikowski wrote:
Hi,
I'm having a problem on shutdown of my application, but only on
Linux. I've
attached the stack trace of the last thread at the bottom of this
message.
From what I can tell, in frame 3, apr_atomic_casptr is attempting
to lock a
mutex, but the mutex has already been destroyed. This consistently
causes my
application to abort. The mutex is initialized the first time
APRInitializer::getInstance is called.
I'm wondering if the call order could be changed somehow on
destruction.
However, frame 6 of my core dump is showing me that the object being
destroyed is a static class member variable, and I don't have any
control
over when those are initialized or destroyed.
I think it may be related to bug 159, but that bug is reporting a
seg fault,
so I'm not sure if this is related. Does any one have any
suggestions for
working around this?
Thanks,
Steve
There are two scenarios where I have seen this type of problem (three
if you include deviations from spec in earlier gcc's): destruction of
the Level constants (Level::OFF etc) that appear at the end of src/
level.cpp and logging taking place during the destruction of static
objects.
You might try commenting out Level::OFF et al from include/log4cxx/
level.h and the constructors at the bottom of src/level.cpp. log4cxx
shouldn't need them since it uses the equivalent Level::getOff() et
al methods. They have been kept for compatibility with earlier
versions of log4cxx but been problematic and should likely be
removed. I can't tell from the stack trace if you are running into
this problem or something else.