On May 30, 2008, at 3:16 PM, GregN wrote:
Unfortunately your suggestion didn't fix the issue.
Under debugger the problem happen in apr_atomic.c::apr_atomic_dec32()
line:310.
It is inside #if APR_HAS_THREADS.
I tried to set APR_HAS_THREADS to 0 in include/apr.h but got system lookup
error.

APR_HAS_THREADS ==1 is right and expected, the question is why:

#if (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__) && !defined(USE_GENERAL_ATOMICS)

is not true.

Forget what I was saying about LoggerPtr. Looking at the stack trace again that isn't the issue. The call to apr_atomic_dec32 that is crashing isn't in the base class for LoggerPtr, it is in the base class (ObjectImpl) for some log4cxx object that is defined as a static. Just not clear which one.

A workaround until we can figure out the issue would be to change objectimpl.cpp to avoid apr_atomic_inc32 and apr_atomic_dec32:

Index: src/main/cpp/objectimpl.cpp
===================================================================
--- src/main/cpp/objectimpl.cpp (revision 654826)
+++ src/main/cpp/objectimpl.cpp (working copy)
@@ -36,12 +36,12 @@

 void ObjectImpl::addRef() const
 {
-  apr_atomic_inc32( & ref );
+  ref++;
 }

 void ObjectImpl::releaseRef() const
 {
-  if ( apr_atomic_dec32( & ref ) == 0 )
+  if ( --ref == 0 )
   {
     delete this;
   }



Reply via email to