Boost logo

Threads-Devel :

Subject: [Threads-devel] Cleanup within dll
From: Rudi Lindl (rudi.lindl_at_[hidden])
Date: 2008-09-04 08:50:20


I have trouble with a clean up function within a dll.

here is the code that works that do not work inside a dll.

dll code
=============================

void detach_thread(unsigned int * in_current_thread_index)
{
    scoped_lock_recursive lock(mutex);
        std::cout << "detatching thread in slot " <<
*in_current_thread_index << std::endl;
    delete in_current_thread_index;
}
boost::thread_specific_ptr<unsigned int>
current_thread_index(&detach_thread);

BOOL WINAPI DllMain(HINSTANCE hinstDLL, // handle to DLL module
                    DWORD fdwReason, // reason for calling function
                    LPVOID lpReserved ) // reserved
{
    LPVOID lpvData;
    BOOL fIgnore;
    // Perform actions based on the reason for calling.
    switch( fdwReason )
    {
    case DLL_PROCESS_ATTACH:
        break;

    case DLL_THREAD_ATTACH:
        break;

    case DLL_THREAD_DETACH:
        std::cout << "thread detached in DLL Main" << std::endl;
        break;

    case DLL_PROCESS_DETACH:
        break;

    default:
        break;
    }
    return TRUE;
}

void myDLLFuntion(int i)
{
    scoped_lock_recursive lock(mutex);
    if (current_thread_index.get() == NULL)
    {
        current_thread_index.reset(new unsigned int());
            std::cout << i << " new thread attached!" << std::endl;
    }
}

Code that use the DLL:
====================
void doThread(int i)
{
   myDLLFuntion(i);
}

int main(VOID)
{
  boost::thread thrd1(boost::bind(doThread,1));
  thrd1.join();
}

output on cosole:
===============
1 new thread attached!
thread detached in DLL Main

But the cleanup funtion is not called. Any Idea?
If i move the myDllFuntion, void detach_thread funtion and the declaration
of the boost::thread_specific_ptr<unsigned int>
current_thread_index(&detach_thread) from the dll to the file where the main
funtions is defined everything works as expected.

regards
rudi



Threads-Devel list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk