Boost logo

Boost Users :

Subject: Re: [Boost-users] thread_specific_ptr problem
From: Vertleyb, Arkadiy (Arkadiy.Vertleyb_at_[hidden])
Date: 2009-10-23 11:30:40


Hi all,

The following code demonstrates thread_specific_ptr problem while loading/unloading a shared library. Apparently some resource is not cleanned up. Can somebody comment on this?

Thanks,
Arkadiy

lib.cpp:
-------

#include <string>
#include <boost/thread.hpp>

boost::thread_specific_ptr < std::string > tls_with_mmap;

main.cpp:
----------

#include <stdint.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <stdio.h>

int main( int argc, const char* argv[])
{
    if( argc < 3 )
    {
        printf("usage %s <dlname> <repeat count>\n", argv[0]);
        return 1;
    }
    const char* dlname = argv[1];
    uint16_t iters = atoi(argv[2]);

    for( uint16_t i = 0; i < iters; ++i )
    {
        printf("attempt %02d\n", i);
        void* handle = ::dlopen(dlname, RTLD_NOW );
        if( handle )
            ::dlclose(handle);
        else
        {
            printf("dlopen failed\n");
            break;
        }
    }

    return 0;
}

build.sh:
--------

BOOST_VER=38
CCFLAGS="-Wcomment -Wformat -Wmissing-braces -Wparentheses -Wreturn-type -Wsign-compare -Wstrict-aliasing -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable -Wextra -g -O0 -fno-inline -fexceptions -ftemplate-depth-128 -Wnon-virtual-dtor -I/usr/include/nptl -I/builder/3rdParty/boost/v${BOOST_VER}.0/include -D__NO_INLINE__=1 -D_DEBUG -DDEBUG"

g++ -x c++ -m32 ${CCFLAGS} -fPIC -pipe -o "lib.o" -c "lib.cpp"
g++ -m32 -o boost_thread_test.so -shared -Wl,-Bsymbolic -Wl,-h -Wl,boost_thread_test.so -Wl,--no-undefined -Wl,--start-group lib.o /builder/3rdParty/boost/v${BOOST_VER}.0/lib32/gcc-3.4.6/libboost_thread-mt-d.a /usr/lib/libpthread.so -lstdc++ -lc -lm -Wl,--end-group

g++ -x c++ -m32 ${CCFLAGS} -fPIC -pipe -o "main.o" -c "main.cpp"
g++ -m32 -o boost_thread_test.exe -Wl,--start-group main.o /usr/lib/libpthread.so /usr/lib/libdl.so -lstdc++ -lc -lm -Wl,--end-group

Linux version:
--------------
Red Hat Enterprise Linux ES release 4 (Nahant Update 4)

Invocation:
-----------

> ./boost_thread_test.exe ./boost_thread_test.so 600
...
attempt 509
attempt 510
attempt 511
boost_thread_test.exe: libs/thread/src/pthread/thread.cpp:102: void boost::detail::<unnamed>::create_current_thread_tls_key(): Assertion `!pthread_key_create(&current_thread_tls_key,&tls_destructor)' failed.
Aborted



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net