This is the mail archive of the pthreads-win32@sources.redhat.com mailing list for the pthreas-win32 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Handle leak when using pthread mutex with win32 api threads


On Fri, 4 Mar 2005 17:52:58 +0200, Dmitry Sernii <bogolt@gmail.com> wrote:
> Hello All!
> I have handle leak, when using win32 api threads with pthread mutexes.
> I'm using pthread-win32 2005-01-03 pthread snapshot.
> 
> Here is the sample application which reproduce the problem:
> 
> #include <pthread.h>
> #include <windows.h>
> #include <conio.h>
> 
> const int max_threads = 500;
> 
> DWORD WINAPI threadProc(void* param)
> {
>        static pthread_mutex_t mutex(PTHREAD_RECURSIVE_MUTEX_INITIALIZER);

that line above is not thread safe.  you might initialize the same
mutex multiple times.  (the C++ standard says it gets initted once,
but it doesn't talk about threads.  If you look at the disassembly, it
probably only guards the constructor with a static bool flag - not in
a thread safe way.) Not good.  In this case, putting the line OUTSIDE
the threadProc function would be good enough to make the mutex
constructor really only happen once.

>        pthread_mutex_lock(&mutex);
>        pthread_mutex_unlock(&mutex);
>        return 0;
> }
> 
> void main()
> {
>        DWORD id;
>        HANDLE th[max_threads];
>        int i;
>        for (i=0;i<max_threads;i++)
>                th[i]=CreateThread(0,0,threadProc,0,0,&id);
> 
>        for (i=0;i<max_threads;i++)
>        {
>                WaitForSingleObject(th[i],INFINITE);
>                CloseHandle(th[i]);
>        }
>        getch();
> }
> 
> after that if you take a look at Task Manager you can see lots of
> handlers used by the program. If you replace win32 API threads with
> pthreads everything works fine. Also this program works ok if you
> change pthread mutexes with win32 mutexes.
> The same problem happends when using QT threads (version 3.3.4
> )instead of win32 api threads.
> 
> problem reproduces with MSVC 6.0 compiler.
> 
> Best Regards,
> Dmitrii Sernii
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]