From 9b0e93aa59205fa6e35f0d8e5c2065c6e806f114 Mon Sep 17 00:00:00 2001 From: rpj Date: Thu, 6 Aug 1998 08:32:53 +0000 Subject: *** empty log message *** --- ChangeLog | 29 +++++++++++++++++++++++++++++ dll.c | 19 +------------------ exit.c | 2 +- fork.c | 6 +++--- global.c | 10 +++++----- implement.h | 3 +++ misc.c | 4 ++-- private.c | 4 ++-- 8 files changed, 46 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6e6c30..040695c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,34 @@ Thu Aug 6 15:19:22 1998 Ross Johnson + * misc.c (pthread_once): Fix arg 1 of EnterCriticalSection() + and LeaveCriticalSection() calls to pass address-of lock. + + * fork.c (pthread_atfork): Typecast (void (*)(void *)) funcptr + in each _pthread_handler_push() call. + + * exit.c (_pthread_exit): Fix attr arg in + pthread_attr_getdetachstate() call. + + * private.c (_pthread_new_thread): Typecast (HANDLE) NULL. + (_pthread_delete_thread): Ditto. + + * implement.h: (_PTHREAD_MAX_THREADS): Add define. This keeps + changing in an attempt to make thread administration data types + opaque and cleanup DLL startup. + + * dll.c (PthreadsEntryPoint): + (_pthread_virgins): Remove malloc() and free() calls. + (_pthread_reuse): Ditto. + (_pthread_win32handle_map): Ditto. + (_pthread_threads_mutex_table): Ditto. + + * global.c (_POSIX_THREAD_THREADS_MAX): Initialise with + _PTHREAD_MAX_THREADS. + (_pthread_virgins): Ditto. + (_pthread_reuse): Ditto. + (_pthread_win32handle_map): Ditto. + (_pthread_threads_mutex_table): Ditto. + * create.c (pthread_create): Typecast (HANDLE) NULL. Typecast (unsigned (*)(void *)) start_routine. diff --git a/dll.c b/dll.c index 4809b2b..5900ed9 100644 --- a/dll.c +++ b/dll.c @@ -35,20 +35,7 @@ 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. */ + /* Set up per thread thread ID storage. */ _pthread_threadID_TlsIndex = TlsAlloc(); if (_pthread_threadID_TlsIndex == 0xFFFFFFFF) @@ -58,10 +45,6 @@ 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; diff --git a/exit.c b/exit.c index 4a1943b..be7db75 100644 --- a/exit.c +++ b/exit.c @@ -57,7 +57,7 @@ _pthread_exit(pthread_t thread, void * value, int return_code) be deleted by the last waiting pthread_join() after this thread has terminated. */ - if (pthread_attr_getdetachstate(thread, &detachstate) == 0 + if (pthread_attr_getdetachstate(&thread->attr, &detachstate) == 0 && detachstate == PTHREAD_CREATE_DETACHED && thread->join_count == 0) { diff --git a/fork.c b/fork.c index aa621f2..3379e41 100644 --- a/fork.c +++ b/fork.c @@ -27,7 +27,7 @@ pthread_atfork(void (*prepare)(void), /* Push prepare. */ if (_pthread_handler_push(_PTHREAD_FORKPREPARE_STACK, _PTHREAD_HANDLER_POP_FIFO, - prepare, + (void (*)(void *)) prepare, NULL) == ENOMEM) { ret = ENOMEM; @@ -40,7 +40,7 @@ pthread_atfork(void (*prepare)(void), /* Push parent. */ if (_pthread_handler_push(_PTHREAD_FORKPARENT_STACK, _PTHREAD_HANDLER_POP_LIFO, - parent, + (void (*)(void *)) parent, NULL) == ENOMEM) { ret = ENOMEM; @@ -53,7 +53,7 @@ pthread_atfork(void (*prepare)(void), /* Push child. */ if (_pthread_handler_push(_PTHREAD_FORKCHILD_STACK, _PTHREAD_HANDLER_POP_LIFO, - child, + (void (*)(void *)) child, NULL) == ENOMEM) { ret = ENOMEM; diff --git a/global.c b/global.c index 2914fb7..0835f48 100644 --- a/global.c +++ b/global.c @@ -15,7 +15,7 @@ compatible between versions of the DLL. */ /* POSIX run-time invariant values. (Currently POSIX minimum values) */ -const int _POSIX_THREAD_THREADS_MAX = 128; +const int _POSIX_THREAD_THREADS_MAX = _PTHREAD_MAX_THREADS; const int _POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4; const int _POSIX_THREAD_KEYS_MAX = 128; @@ -42,21 +42,21 @@ DWORD _pthread_threads_count = 0; /* Per thread management storage. See comments in private.c */ /* An array of struct _pthread */ -_pthread_t _pthread_virgins[]; +_pthread_t _pthread_virgins[_PTHREAD_MAX_THREADS]; /* Index to the next available previously unused struct _pthread */ int _pthread_virgin_next = 0; /* An array of pointers to struct _pthread */ -pthread_t _pthread_reuse[]; +pthread_t _pthread_reuse[_PTHREAD_MAX_THREADS]; /* Index to the first available reusable pthread_t. */ int _pthread_reuse_top = -1; /* An array of pointers to struct _pthread indexed by hashing the Win32 handle. */ -pthread_t _pthread_win32handle_map[]; +pthread_t _pthread_win32handle_map[_PTHREAD_MAX_THREADS]; /* Per thread mutex locks. */ -pthread_mutex_t _pthread_threads_mutex_table[]; +pthread_mutex_t _pthread_threads_mutex_table[_PTHREAD_MAX_THREADS]; diff --git a/implement.h b/implement.h index 3e270c6..bf55e91 100644 --- a/implement.h +++ b/implement.h @@ -7,6 +7,9 @@ #ifndef _IMPLEMENT_H #define _IMPLEMENT_H +/* Use internally to initialise const ints and thread admin array sizes. */ +#define _PTHREAD_MAX_THREADS 128 + #define _PTHREAD_HASH_INDEX(x) (((ULONG) x) % PTHREAD_THREADS_MAX) enum { diff --git a/misc.c b/misc.c index 7905488..086521e 100644 --- a/misc.c +++ b/misc.c @@ -25,12 +25,12 @@ pthread_once(pthread_once_t *once_control, the DLL is unloaded. */ /* An atomic test-and-set of the "once" flag. */ - EnterCriticalSection(once_control->lock); + EnterCriticalSection(&once_control->lock); if (once_control->flag == 0) { flag = once_control->flag = 1; } - LeaveCriticalSection(once_control->lock); + LeaveCriticalSection(&once_control->lock); if (flag) { diff --git a/private.c b/private.c index d4d94f0..444086d 100644 --- a/private.c +++ b/private.c @@ -134,7 +134,7 @@ _pthread_new_thread(pthread_t * thread) } } - new_thread->win32handle = NULL; + new_thread->win32handle = (HANDLE) NULL; new_thread->ptstatus = _PTHREAD_NEW; pthread_attr_init(&(new_thread->attr)); new_thread->joinvalueptr = NULL; @@ -164,7 +164,7 @@ _pthread_delete_thread(_pthread_t * thread) && thread->ptstatus == _PTHREAD_EXITED) { pthread_attr_destroy(&(thread->attr)); - thread->win32handle = NULL; + thread->win32handle = (HANDLE) NULL; thread->ptstatus = _PTHREAD_REUSE; _pthread_reuse[++_pthread_reuse_top] = thread; -- cgit v1.2.3