You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Sebastien SOILEN <se...@gtd.es> on 2009/02/04 11:41:55 UTC

segmentation fault in apr_atomic_add32

Hello,

I got an segmentation error using activemq-cpp-2.2.3 compiled with 
apr-1.3.3 and apr-util-1.3.4. The backtrace shows a problem with the 
apr_atomic_add32 function:

    Program terminated with signal 11, Segmentation fault.
    #0  0x00242367 in apr_atomic_add32 (mem=0x9001e4c, val=1) at
    atomic/unix/mutex.c:78
    78          apr_thread_mutex_t *mutex = hash_mutex[ATOMIC_HASH(mem)];
    (gdb) bt
    #0  0x00242367 in apr_atomic_add32 (mem=0x9001e4c, val=1) at
    atomic/unix/mutex.c:78
    #1  0x002423d5 in apr_atomic_inc32 (mem=0x9001e4c) at
    atomic/unix/mutex.c:132
    #2  0x01238f60 in
    decaf::util::concurrent::atomic::AtomicInteger::getAndIncrement
    (this=0x9001e48) at decaf/util/concurrent/atomic/AtomicInteger.cpp:54
    #3  0x011cc3b3 in
    activemq::transport::filters::ResponseCorrelator::oneway
    (this=0x9001e28, command=0xb70f2074) at
    activemq/transport/filters/ResponseCorrelator.cpp:51
    #4  0x0119ae93 in
    activemq::connector::openwire::OpenWireFormatNegotiator::oneway
    (this=0x9047d50, command=0xb70f2074) at
    activemq/connector/openwire/OpenWireFormatNegotiator.cpp:75
    #5  0x0119b8c2 in
    activemq::connector::openwire::OpenWireConnector::oneway
    (this=0x9032da0, command=0xb70f2074) at
    activemq/connector/openwire/OpenWireConnector.cpp:1495
    #6  0x0119ccf0 in
    activemq::connector::openwire::OpenWireConnector::acknowledge
    (this=0x9032da0, session=0x9054148, consumer=0x90554d8,
    message=0x90991c0, ackType=<value optimized out>)
        at activemq/connector/openwire/OpenWireConnector.cpp:916
    #7  0x0112ad8d in activemq::core::ActiveMQConsumer::acknowledge
    (this=0x9055510, message=0x9099278, ackType=2) at
    activemq/core/ActiveMQConsumer.cpp:458
    #8  0x0112b1fc in
    activemq::core::ActiveMQConsumer::afterMessageIsConsumed
    (this=0x9055510, message=0x9099278, messageExpired=false) at
    activemq/core/ActiveMQConsumer.cpp:408
    #9  0x0112bfbf in activemq::core::ActiveMQConsumer::dispatch
    (this=0x9055510, data=@0x9098f68) at
    activemq/core/ActiveMQConsumer.cpp:492
    #10 0x011450e5 in activemq::core::ActiveMQSessionExecutor::dispatch
    (this=0x90546d8, data=@0x9098f68) at
    activemq/core/ActiveMQSessionExecutor.cpp:185
    #11 0x01146711 in
    activemq::core::ActiveMQSessionExecutor::dispatchAll
    (this=0x90546d8) at activemq/core/ActiveMQSessionExecutor.cpp:266
    #12 0x01146d3f in activemq::core::ActiveMQSessionExecutor::run
    (this=0x90546d8) at activemq/core/ActiveMQSessionExecutor.cpp:208
    #13 0x0121bdb8 in decaf::lang::Thread::runCallback (self=0x8fc7b58,
    param=0x90554a8) at decaf/lang/Thread.cpp:125
    #14 0x0023fa26 in dummy_worker (opaque=0x8fc7b58) at
    threadproc/unix/thread.c:142
    #15 0x00a1945b in start_thread () from /lib/libpthread.so.0
    #16 0x00970c4e in clone () from /lib/libc.so.6

I reproduced the error with a simple test :

    #include <stdio.h>
    #include <apr_atomic.h>

    int main(void)
    {
       apr_uint32_t val;
       apr_atomic_set32(&val, 23);
       printf("result: %d", apr_atomic_inc32(&val));
    }

obtaining this stack trace:


    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread -1208088832 (LWP 21121)]
    0x00dc94c7 in apr_atomic_set32 (mem=0xbfe2d880, val=23) at
    atomic/unix/mutex.c:78
    78          apr_thread_mutex_t *mutex = hash_mutex[ATOMIC_HASH(mem)];
    (gdb) bt
    #0  0x00dc94c7 in apr_atomic_set32 (mem=0xbfe2d880, val=23) at
    atomic/unix/mutex.c:78
    #1  0x08048608 in main ()

In this case, this is the call to apr_atomic_set32 that caused the 
segfault. I reproduced it too with the test function from the test suite 
provided on the svn repository.
Any clue? Any need for more information or more tests?

Regards,

Sebastien SOILEN





Re: segmentation fault in apr_atomic_add32

Posted by Sebastien SOILEN <se...@gtd.es>.
Well, my test is not valid because I forgot to call apr_initialize() first.
Then I have to find another way to reproduce the original segmentation 
fault that occurred.

Regards,

Sebastien SOILEN


Sebastien SOILEN a écrit :
> Hello,
>
> I got an segmentation error using activemq-cpp-2.2.3 compiled with 
> apr-1.3.3 and apr-util-1.3.4. The backtrace shows a problem with the 
> apr_atomic_add32 function:
>
>    Program terminated with signal 11, Segmentation fault.
>    #0  0x00242367 in apr_atomic_add32 (mem=0x9001e4c, val=1) at
>    atomic/unix/mutex.c:78
>    78          apr_thread_mutex_t *mutex = hash_mutex[ATOMIC_HASH(mem)];
>    (gdb) bt
>    #0  0x00242367 in apr_atomic_add32 (mem=0x9001e4c, val=1) at
>    atomic/unix/mutex.c:78
>    #1  0x002423d5 in apr_atomic_inc32 (mem=0x9001e4c) at
>    atomic/unix/mutex.c:132
>    #2  0x01238f60 in
>    decaf::util::concurrent::atomic::AtomicInteger::getAndIncrement
>    (this=0x9001e48) at decaf/util/concurrent/atomic/AtomicInteger.cpp:54
>    #3  0x011cc3b3 in
>    activemq::transport::filters::ResponseCorrelator::oneway
>    (this=0x9001e28, command=0xb70f2074) at
>    activemq/transport/filters/ResponseCorrelator.cpp:51
>    #4  0x0119ae93 in
>    activemq::connector::openwire::OpenWireFormatNegotiator::oneway
>    (this=0x9047d50, command=0xb70f2074) at
>    activemq/connector/openwire/OpenWireFormatNegotiator.cpp:75
>    #5  0x0119b8c2 in
>    activemq::connector::openwire::OpenWireConnector::oneway
>    (this=0x9032da0, command=0xb70f2074) at
>    activemq/connector/openwire/OpenWireConnector.cpp:1495
>    #6  0x0119ccf0 in
>    activemq::connector::openwire::OpenWireConnector::acknowledge
>    (this=0x9032da0, session=0x9054148, consumer=0x90554d8,
>    message=0x90991c0, ackType=<value optimized out>)
>        at activemq/connector/openwire/OpenWireConnector.cpp:916
>    #7  0x0112ad8d in activemq::core::ActiveMQConsumer::acknowledge
>    (this=0x9055510, message=0x9099278, ackType=2) at
>    activemq/core/ActiveMQConsumer.cpp:458
>    #8  0x0112b1fc in
>    activemq::core::ActiveMQConsumer::afterMessageIsConsumed
>    (this=0x9055510, message=0x9099278, messageExpired=false) at
>    activemq/core/ActiveMQConsumer.cpp:408
>    #9  0x0112bfbf in activemq::core::ActiveMQConsumer::dispatch
>    (this=0x9055510, data=@0x9098f68) at
>    activemq/core/ActiveMQConsumer.cpp:492
>    #10 0x011450e5 in activemq::core::ActiveMQSessionExecutor::dispatch
>    (this=0x90546d8, data=@0x9098f68) at
>    activemq/core/ActiveMQSessionExecutor.cpp:185
>    #11 0x01146711 in
>    activemq::core::ActiveMQSessionExecutor::dispatchAll
>    (this=0x90546d8) at activemq/core/ActiveMQSessionExecutor.cpp:266
>    #12 0x01146d3f in activemq::core::ActiveMQSessionExecutor::run
>    (this=0x90546d8) at activemq/core/ActiveMQSessionExecutor.cpp:208
>    #13 0x0121bdb8 in decaf::lang::Thread::runCallback (self=0x8fc7b58,
>    param=0x90554a8) at decaf/lang/Thread.cpp:125
>    #14 0x0023fa26 in dummy_worker (opaque=0x8fc7b58) at
>    threadproc/unix/thread.c:142
>    #15 0x00a1945b in start_thread () from /lib/libpthread.so.0
>    #16 0x00970c4e in clone () from /lib/libc.so.6
>
> I reproduced the error with a simple test :
>
>    #include <stdio.h>
>    #include <apr_atomic.h>
>
>    int main(void)
>    {
>       apr_uint32_t val;
>       apr_atomic_set32(&val, 23);
>       printf("result: %d", apr_atomic_inc32(&val));
>    }
>
> obtaining this stack trace:
>
>
>    Program received signal SIGSEGV, Segmentation fault.
>    [Switching to Thread -1208088832 (LWP 21121)]
>    0x00dc94c7 in apr_atomic_set32 (mem=0xbfe2d880, val=23) at
>    atomic/unix/mutex.c:78
>    78          apr_thread_mutex_t *mutex = hash_mutex[ATOMIC_HASH(mem)];
>    (gdb) bt
>    #0  0x00dc94c7 in apr_atomic_set32 (mem=0xbfe2d880, val=23) at
>    atomic/unix/mutex.c:78
>    #1  0x08048608 in main ()
>
> In this case, this is the call to apr_atomic_set32 that caused the 
> segfault. I reproduced it too with the test function from the test 
> suite provided on the svn repository.
> Any clue? Any need for more information or more tests?
>
> Regards,
>
> Sebastien SOILEN
>
>
>
>