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: pthread library static linking


One reason, and possibly the only reason, is that pthreads-win32 allows Win32 threads (those not started via pthread_create) to call pthreads routines. But to do this usually generates an on-the-fly pthread handle for the Win32 thread so that it can be managed. Effectively, any Win32 thread that calls a pthreads routine becomes a POSIX (DETACHED) thread from the library's point of view. The hooks in dllMain enable cleanup of these 'implicit' pthread handles because the library has no other way of knowing when they exit.

The routines that dllMain calls were split out and are exported so that they could be called in statically linked applications. See dllMain.c and README.NONPORTABLE.

Now, I could be wrong, but if Win32 threads never call pthreads routines then your statically linked application may not need to explicitly call these dllMain hooks. Threads created via pthread_create should be getting cleaned up at the end of ptw32_threadStart(). You could try it, but check for memory leaks.

Ross

Meno Abels wrote:

hello,

i'am new here so one question is allowed-:)
I want to use pthread-win32 not as a dll. I want
to link the pthread-win32 functionality static
to my application just to make distribution of that
application easier.
So that is quite easy to get, but there are the DllMain.
In DllMain you use the DLL_THREAD_ATTACH/DLL_THREAD_DETACH.
These prevents to use your lib static linked. Not technical
but functional. The DLL_PROCESS_ATTACH/DETACH is simple to
simulate infact I will call it on startup and end of my
application direct. The thread stuff is more complex i have to
change the thread create and thread exit code of your library.
My basic question is why you choose this solution with
DllMain. The pthread library is a wrapper around the
windows functions so it would be obvious to add the needed
initialisation for the create and exit directly.
Why is this done with DllMain?

Thanks in advance

meno



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