Boost logo

Boost :

Subject: [boost] [thread] reset a thread_specific_ptr by this pointer
From: Pengcheng Song (pengcheng.simon_at_[hidden])
Date: 2008-12-12 16:34:45

Hi All,
   I was experimenting with the boost.threads library and especially
boost::thread_specific_ptr. However, I ran into problems trying to reset the
thread_specific_ptr by the this pointer (see the code below).

// ========= beginning of code =============
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/tss.hpp>

boost::mutex mutex_;

class A
        double x_;
        static boost::thread_specific_ptr ptr_;
        A(double x=0) : x_(x)

        void operator()()
                if (0==ptr_.get()) {
                boost::mutex::scoped_lock lock(mutex_);
                std::cout << "x_=" << x_ << std::endl;

boost::thread_specific_ptr A::ptr_;

int main()
        boost::thread thrd1( A(1) );
        boost::thread thrd2( A(2) );
        return 0;
// ======= end of code =========

This compiled fine with boost_1_36 (binary from boostPro) under VC9 with
multithreaded debug DLL code generation. But when I ran it under the debug
mode, I got the following error message:

Debug Assertion Failed.
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

I searched the web and this seemed to be a memory problem. And I noticed
that it failed to call the destructor of thread_specific_ptr.

Is my code legal? Or one is not supposed to reset a thread_specific_ptr to
this pointer? Your feedback would be greatly appreciated.

Pengcheng Song

View this message in context:
Sent from the Boost - Dev mailing list archive at

Boost list run by bdawes at, gregod at, cpdaniel at, john at