qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Stitcher <astitc...@redhat.com>
Subject Re: Why is qpid::sys::ssl::shutdownNSS being called in a global destructor?
Date Wed, 02 Dec 2009 15:39:14 GMT
On Tue, 2009-12-01 at 16:34 -0500, Alan Conway wrote:
> ...I'm getting this core dump on exit from the cluster_tests in a cmake build:
> 
> #0  0x00000038e0075bb8 in malloc_consolidate () from /lib64/libc.so.6
> #1  0x00000038e0078022 in _int_malloc () from /lib64/libc.so.6
> #2  0x00000038e0079fe8 in calloc () from /lib64/libc.so.6
> #3  0x00000031cee14463 in ?? () from /lib64/libnspr4.so
> #4  0x00000031cee1aeff in ?? () from /lib64/libnspr4.so
> #5  0x00000031cee2865d in PR_GetCurrentThread () from /lib64/libnspr4.so
> #6  0x00000031cee1a397 in PR_SetError () from /lib64/libnspr4.so
> #7  0x00000031cfa1863d in NSS_Shutdown () from /lib64/libnss3.so
> #8  0x00007f5f94296689 in qpid::sys::ssl::shutdownNSS () at 
> /home/aconway/qpid/qpid/cpp/src/qpid/sys/ssl/util.cpp:115
> #9  0x00007f5f934d5607 in qpid::client::(anonymous 
> namespace)::StaticInit::~StaticInit (this=0x38e0369e80, __in_chrg=<value 
> optimized out>) at /home/aconway/qpid/qpid/cpp/src/qpid/client/SslConnector.cpp:163
> #10 0x00000038e0036bc0 in __cxa_finalize () from /lib64/libc.so.6
> #11 0x00007f5f934d5556 in __do_global_dtors_aux () from 
> /home/aconway/qpid/qpid/cmake/src/sslconnector.so
> #12 0x0000000000000000 in ?? ()
> 
> This looks suspect to me, doing anything of any complexity in a static 
> destructor is dangerous, unless the NSS library specifically states that its 
> safe to shutdown this way.

I'd tend to agree - perhaps this should run on module unload - oh wait -
we don't have any way except static destruction to indicate module
unload.

> 
> Not sure why its affecting the cluster tests as they don't use SSL, nor why it's 
> happening in cmake build and not in automake build (I'm trying to get the 
> cluster tests running in a cmake build)

The cmake build correctly uses the -mt versions of the libs in versions
of boost that have them (the ones in fedora do, the ones in rhel don't)
whereas the autotools build always uses the non -mt versions. That could
be the difference.

However, the current checked in cluster module doesn't build with cmake,
giving undefined symbols with fedora 11/12 at least - it does work with
rhel5 though. this is related to the new(ish) boost_system lib. So this
indicates you must be testing using rhel5 which doesn't have -mt lib.

Andrew



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


Mime
View raw message