Fw: [Boost-users] Problem with shared_ptr and pthreads_mutex_lock

Peter Dimov pdimov@mmltd.net
Thu Oct 6 08:43:00 GMT 2005


Forwarding from [boost-users], the problem seems libstdc++ specific:

Kurt Kohler wrote:
> I've run into a strange problem using shared_ptr which I've reduced to
> the following simple case.
> 
> #include <tr1/memory>
> 
> class X
> {
> public:
>    typedef std::tr1::shared_ptr<X> Ptr;
> 
>    int x;
> };
> 
> int main(int argc, char *argv[])
> {
>    for (int i = 0; i < 100; i++)
>    {
>        X::Ptr pX(new X);
>    }
> 
>    return EXIT_SUCCESS;
> }
> 
> Compiling with g++ 4.0.1 on a Debian system with "-O0 -g -fno-inline
> -DDEBUG". When this program is run under Valgrind (MemCheck) repeated
> messages like the following occur.
> 
> ==9950== Conditional jump or move depends on uninitialized value(s)
> ==9950==    at 0x1BBB6D9A: pthread_mutex_lock (in
> /lib/tls/libpthread-2.3.5.so)
> ==9950==    by 0x1BB56C75: pthread_mutex_lock (in
> /lib/tls/libc-2.3.5.so) ==9950==    by 0x804BF29:
> __gthread_mutex_lock(pthread_mutex_t*) (gthr-default.h:510)
> ==9950==    by 0x8057ACD: std::tr1::_Sp_counted_base::release()
> (boost_shared_ptr.h:148)
> ==9950==    by 0x8057B14: std::tr1::shared_count::~shared_count()
> (boost_shared_ptr.h:266)
> ==9950==    by 0x806B1F4: std::tr1::shared_ptr<X>::~shared_ptr()
> (boost_shared_ptr.h:474)
> ==9950==    by 0x806B1C9: main (main.cpp:30)
> ==9950==
> 
> In the real code this leads to either a hang or an assert in
> pthread_mutex_lock. If the created pointer is put in a container then
> this doesn't seem to happen although the problem may just be postponed
> (the program is never able to complete).
> 
> I've tried Electric Fence and dmalloc but neither told me anything
> useful. 
> 
> The hang or assert occurs at the same point every time unless the
> program is changed or the environment changes (e.g., running under
> Valgrind). It seems consistent with uninitialized memory. But why? And
> more important, what can I do about it?
> 
> Any help would be greatly appreciated!
> 
> Kurt Kohler
> Alpha Omega Computer Systems
> Corvallis, OR
> 
> 
> _______________________________________________
> Boost-users mailing list
> Boost-users@lists.boost.org
> http://lists.boost.org/mailman/listinfo.cgi/boost-users



More information about the Libstdc++ mailing list