diff options
Diffstat (limited to 'dll.c')
-rw-r--r-- | dll.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -15,6 +15,9 @@ */ #include <windows.h> +#include <malloc.h> +#include "pthread.h" +#include "implement.h" /* Global index for TLS data. */ DWORD _pthread_threadID_TlsIndex; @@ -32,6 +35,20 @@ BOOL WINAPI PthreadsEntryPoint(HINSTANCE dllHandle, break; case DLL_PROCESS_ATTACH: + /* Allocate storage for thread admin arrays. */ + _pthread_virgins = + (_pthread_t *) malloc(sizeof(_pthread_t) * PTHREAD_THREADS_MAX); + + _pthread_reuse = + (pthread_t *) malloc(sizeof(pthread_t) * PTHREAD_THREADS_MAX); + + _pthread_win32handle_map = + (pthread_t *) malloc(sizeof(pthread_t) * PTHREAD_THREADS_MAX); + + _pthread_threads_mutex_table = + (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t) * PTHREAD_THREADS_MAX); + + /* Per thread thread ID storage. */ _pthread_threadID_TlsIndex = TlsAlloc(); if (_pthread_threadID_TlsIndex == 0xFFFFFFFF) @@ -41,6 +58,10 @@ BOOL WINAPI PthreadsEntryPoint(HINSTANCE dllHandle, break; case DLL_PROCESS_DETACH: + free(_pthread_threads_mutex_table); + free(_pthread_win32handle_map); + free(_pthread_reuse); + free(_pthread_virgins); (void) TlsFree(_pthread_threadID_TlsIndex); break; |