summaryrefslogtreecommitdiff
path: root/dll.c
diff options
context:
space:
mode:
Diffstat (limited to 'dll.c')
-rw-r--r--dll.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/dll.c b/dll.c
index 518d443..4809b2b 100644
--- a/dll.c
+++ b/dll.c
@@ -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;