diff options
author | rpj <rpj> | 1998-07-30 13:51:57 +0000 |
---|---|---|
committer | rpj <rpj> | 1998-07-30 13:51:57 +0000 |
commit | 94cfb27da3941eea2b20867eacc09a5b91168438 (patch) | |
tree | faf0cfaab11409e9f4aa047f897dd82ca345ed56 /dll.c | |
parent | 96600f6d50eeeef1f660352b8455d4df1aed69ff (diff) |
Thu Jul 30 23:12:45 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* implement.h: Remove _pthread_find_entry() prototype.
* private.c: Extend comments.
Remove _pthread_find_entry() - no longer needed.
* create.c (_pthread_start_call): Add call to TlsSetValue() to
store the thread ID.
* dll.c (PthreadsEntryPoint): Implement. This is called
whenever a process loads the DLL. Used to initialise thread
local storage.
* implement.h: Add _pthread_threadID_TlsIndex.
Add ()s around _PTHREAD_VALID expression.
* misc.c (pthread_self): Re-implement using Win32 TLS to store
the threads own ID.
Diffstat (limited to 'dll.c')
-rw-r--r-- | dll.c | 52 |
1 files changed, 52 insertions, 0 deletions
@@ -0,0 +1,52 @@ +/* + * dll.c + * + * Description: + * This translation unit implements DLL initialisation. + */ + +/* We use the DLL entry point function to set up per thread storage + specifically to hold the threads own thread ID. + + The thread ID is stored by _pthread_start_call(). + + The thread ID is retrieved by pthread_self(). + + */ + +#include <windows.h> + +/* Global index for TLS data. */ +DWORD _pthread_threadID_TlsIndex; + +BOOL WINAPI PthreadsEntryPoint(HINSTANCE dllHandle, + DWORD reason, + LPVOID situation) +{ + + + switch (reason) + { + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + break; + + case DLL_PROCESS_ATTACH: + _pthread_threadID_TlsIndex = TlsAlloc(); + + if (_pthread_threadID_TlsIndex == 0xFFFFFFFF) + { + return FALSE; + } + break; + + case DLL_PROCESS_DETACH: + (void) TlsFree(_pthread_threadID_TlsIndex); + break; + + default: + return FALSE; + } + + return TRUE; +} |