Age | Commit message (Collapse) | Author |
|
* buildlib.bat: Fix args to CL when building the .DLL
* cleanup.c (_pthread_destructor_run_all): Fix TSD key management.
This is a tidy-up before TSD and Thread management is completely
replaced by John Bossom's much more elegant code.
* tsd.c (pthread_key_create): Fix TSD key management.
* global.c (_pthread_key_virgin_next): Initialise.
* build.bat: New DOS script to compile and link a pthreads app
using Microsoft's CL compiler linker.
* buildlib.bat: New DOS script to compile all the object files
and create pthread.lib and pthread.dll using Microsoft's CL
compiler linker.
|
|
that hadn't been checked in. Those are to finish off the original TSD management
scheme which will now start to be replaced by John Bossom's implementation.
Anders' description of his changes:-
Fixes the problem with
`TryEnterCriticalSection' on w95 systems. Instead
of directly calling `TryEnterCriticalSection' it
tries to get a pointer at DLL startup and only calls
the function if it exists. See ChangeLog for things
changed.
1998-12-05 Anders Norlander <anorland@hem2.passagen.se>
* implement.h (_pthread_try_enter_critical_section): New extern
* dll.c (_pthread_try_enter_critical_section): New pointer to
TryEnterCriticalSection if it exists; otherwise NULL.
* dll.c (PthreadsEntryPoint):
Initialize _pthread_try_enter_critical_section at startup
and release kernel32 handle when DLL is being unloaded.
* mutex.c (pthread_mutex_trylock): Replaced check for NT with
a check if _pthread_try_enter_critical_section is valid
pointer to a function. Call _pthread_try_enter_critical_section
instead of TryEnterCriticalSection to avoid errors on Win95.
Sun Nov 15 21:24:06 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* cleanup.c (_pthread_destructor_run_all): Declare missing void * arg.
Fixup CVS merge conflicts.
Fri Oct 30 15:15:50 1998 Ross Johnson <rpj@swan.canberra.edu.au>
* cleanup.c (_pthread_handler_push): Fixed bug appending new
handler to list reported by Peter Slacik
<Peter.Slacik@leibinger.freinet.de>.
(new_thread): Rename poorly named local variable to
"new_handler".
Sat Oct 24 18:34:59 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* global.c: Add TSD key management array and index declarations.
* implement.h: Ditto for externs.
Fri Oct 23 00:08:09 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* implement.h (_PTHREAD_TSD_KEY_REUSE): Add enum.
* private.c (_pthread_delete_thread): Add call to
_pthread_destructor_run_all() to clean up the threads keys.
* cleanup.c (_pthread_destructor_run_all): Check for no more dirty
keys to run destructors on. Assume that the destructor call always
succeeds and set the key value to NULL.
|
|
* global.c (_pthread_tsd_key_table): Fix declaration.
* implement.h(_pthread_TSD_keys_TlsIndex): Add missing extern.
(_pthread_tsd_mutex): Ditto.
* create.c (_pthread_start_call): Fix "keys" array declaration.
Add comment.
* tsd.c (pthread_setspecific): Fix type declaration and cast.
(pthread_getspecific): Ditto.
* cleanup.c (_pthread_destructor_run_all): Declare missing loop
counter.
|
|
* private.c (_pthread_new_thread): Increment _pthread_threads_count.
(_pthread_delete_thread): Decrement _pthread_threads_count.
Remove some comments.
* exit.c (_pthread_exit): : Fix two pthread_mutex_lock() calls that
should have been pthread_mutex_unlock() calls.
(_pthread_vacuum): Remove call to _pthread_destructor_pop_all().
* create.c (pthread_create): Fix two pthread_mutex_lock() calls that
should have been pthread_mutex_unlock() calls.
* global.c (_pthread_tsd_mutex): Add mutex for TSD operations.
* tsd.c (pthread_key_create): Add critical section.
(pthread_setspecific): Ditto.
(pthread_getspecific): Ditto.
(pthread_key_delete): Ditto.
* sync.c (pthread_join): Fix two pthread_mutex_lock() calls that
should have been pthread_mutex_unlock() calls.
|
|
* implement.h (_pthread_tsd_key_table): New.
* create.c (_pthread_start_call): Initialise per-thread TSD keys
to NULL.
* misc.c (pthread_once): Correct typo in comment.
* implement.h (_pthread_destructor_push): Remove.
(_pthread_destructor_pop): Remove.
(_pthread_destructor_run_all): Rename from _pthread_destructor_pop_all.
(_PTHREAD_TSD_KEY_DELETED): Add enum.
(_PTHREAD_TSD_KEY_INUSE): Add enum.
* cleanup.c (_pthread_destructor_push): Remove.
(_pthread_destructor_pop): Remove.
(_pthread_destructor_run_all): Totally revamped TSD.
* dll.c (_pthread_TSD_keys_TlsIndex): Initialise.
* tsd.c (pthread_setspecific): Totally revamped TSD.
(pthread_getspecific): Ditto.
(pthread_create): Ditto.
(pthread_delete): Ditto.
Sun Oct 11 22:44:55 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* global.c (_pthread_tsd_key_table): Add new global.
* implement.h (_pthread_tsd_key_t and struct _pthread_tsd_key):
Add.
(struct _pthread): Remove destructorstack.
* cleanup.c (_pthread_destructor_run_all): Rename from
_pthread_destructor_pop_all. The key destructor stack was made
global rather than per-thread. No longer removes destructor nodes
from the stack. Comments updated.
|
|
* global.c (PTHREAD_MUTEX_INITIALIZER): Move to pthread.h.
* pthread.h (PTHREAD_MUTEX_INITIALIZER): Define.
(pthread_mutex_t): Reimplement as a struct containing a valid
flag. If the flag is ever down upon entry to a mutex operation,
we call pthread_mutex_create() to initialise the object. This
fixes the problem of how to handle statically initialised objects
that can't call InitializeCriticalSection() due to their context.
* mutex.c (pthread_mutex_init): Set valid flag.
(pthread_mutex_destroy): Clear valid flag.
(pthread_mutex_lock): Check and handle the valid flag.
(pthread_mutex_unlock): Likewise.
(pthread_mutex_trylock): Likewise.
* tests/mutex3.c: New file; test for the static initialisation
macro. Passes.
|
|
|
|
* private.c (_pthread_delete_thread): Fix typo. Add missing ';'.
* global.c (_pthread_virgins): Change types from pointer to
array pointer.
(_pthread_reuse): Ditto.
(_pthread_win32handle_map): Ditto.
(_pthread_threads_mutex_table): Ditto.
* implement.h(_pthread_virgins): Change types from pointer to
array pointer.
(_pthread_reuse): Ditto.
(_pthread_win32handle_map): Ditto.
(_pthread_threads_mutex_table): Ditto.
* private.c (_pthread_delete_thread): Fix "entry" should be "thread".
* misc.c (pthread_self): Add extern for _pthread_threadID_TlsIndex.
* global.c: Add comment.
* misc.c (pthread_once): Fix member -> dereferences.
Change _pthread_once_flag to once_control->flag in "if" test.
|
|
* implement.h(_pthread_virgins): Add extern.
(_pthread_virgin_next): Ditto.
(_pthread_reuse): Ditto.
(_pthread_reuse_top): Ditto.
(_pthread_win32handle_map): Ditto.
(_pthread_threads_mutex_table): Ditto.
* global.c (_pthread_virgins): Changed from array to pointer.
Storage allocation for the array moved into dll.c.
(_pthread_reuse): Ditto.
(_pthread_win32handle_map): Ditto.
(_pthread_threads_mutex_table): Ditto.
* dll.c (PthreadsEntryPoint): Set up thread admin storage when
DLL is loaded.
* fork.c (pthread_atfork): Fix function pointer arg to all
_pthread_handler_push() calls. Change "arg" arg to NULL in child push.
* exit.c: Add windows.h and process.h includes.
(_pthread_exit): Add local detachstate declaration.
(_pthread_exit): Fix incorrect name for pthread_attr_getdetachstate().
* pthread.h (_POSIX_THREAD_ATTR_STACKSIZE): Move from global.c
(_POSIX_THREAD_ATTR_STACKADDR): Ditto.
* create.c (pthread_create): Fix #if should be #ifdef.
(_pthread_start_call): Remove usused variables.
* process.h: Create.
* windows.h: Move _beginthreadex and _endthreadex into
process.h
Mon Aug 3 21:19:57 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* condvar.c (pthread_cond_init): Add NULL attr to
pthread_mutex_init() call - default attributes will be used.
(cond_wait): Fix typo.
(cond_wait): Fix typo - cv was ev.
(pthread_cond_broadcast): Fix two identical typos.
* cleanup.c (_pthread_destructor_pop_all): Remove _ prefix from
PTHREAD_DESTRUCTOR_ITERATIONS.
* pthread.h: Move _POSIX_* values into posix.h
* pthread.h: Fix typo in pthread_mutex_init() prototype.
* attr.c (pthread_attr_init): Fix error in priority member init.
* windows.h (THREAD_PRIORITY_NORMAL): Add.
* pthread.h (sched_param): Add missing ';' to struct definition.
* attr.c (pthread_attr_init): Remove obsolete pthread_attr_t
member initialisation - cancelstate, canceltype, cancel_pending.
(is_attr): Make arg "attr" a const.
* implement.h (_PTHREAD_HANDLER_POP_LIFO): Remove definition.
(_PTHREAD_HANDLER_POP_FIFO): Ditto.
(_PTHREAD_VALID): Add missing newline escape (\).
(_pthread_handler_node): Make element "next" a pointer.
|
|
* implement.h: Add _PTHREAD_VALID macro.
* sync.c (pthread_join): Modify to use the new thread
type and _pthread_delete_thread(). Rename "target" to "thread".
Remove extra local variable "target".
(pthread_detach): Ditto.
* signal.c (pthread_sigmask): Move init of "us" out of inner block.
Fix instance of "this" should have been "us". Rename "us" to "thread".
* sched.c (pthread_setschedparam): Modify to use the new thread
type.
(pthread_getschedparam): Ditto.
* private.c (_pthread_find_thread): Fix return type and arg.
* implement.h: Remove _PTHREAD_YES and _PTHREAD_NO.
(_pthread_new_thread): Add prototype.
(_pthread_find_thread): Ditto.
(_pthread_delete_thread): Ditto.
(_pthread_new_thread_entry): Remove prototype.
(_pthread_find_thread_entry): Ditto.
(_pthread_delete_thread_entry): Ditto.
( _PTHREAD_NEW, _PTHREAD_INUSE, _PTHREAD_EXITED, _PTHREAD_REUSE):
Add.
* create.c (pthread_create): Minor rename "us" to "new" (I need
these cues but it doesn't stop me coming out with some major bugs
at times).
Load start_routine and arg into the thread so the wrapper can
call it.
* exit.c (pthread_exit): Fix pthread_this should be pthread_self.
* cancel.c (pthread_setcancelstate): Change
_pthread_threads_thread_t * to pthread_t and init with
pthread_this().
(pthread_setcanceltype): Ditto.
|
|
* sync.c: Rename all instances of _pthread_count_mutex to
_pthread_table_mutex.
* implement.h: Rename _pthread_count_mutex to
_pthread_table_mutex.
* global.c: Rename _pthread_count_mutex to
_pthread_table_mutex.
* create.c (pthread_create): Add critical sections.
(_pthread_start_call): Rename _pthread_count_mutex to
_pthread_table_mutex.
|
|
* pthread.h: Converting PTHREAD_* defines to alias the (const int)
values in global.c.
* global.c: Started converting PTHREAD_* defines to (const int) as
a part of making the eventual pthreads DLL binary compatible
through version changes.
|
|
* create.c (_pthread_start_call): Set thread priority. Ensure our
thread entry is removed from the thread table but only if
pthread_detach() was called and there are no waiting joins.
(pthread_create): Set detach flag in thread entry if the
thread is created PTHREAD_CREATE_DETACHED.
* pthread.h (pthread_attr_t): Rename member "detachedstate".
* attr.c (pthread_attr_init): Rename attr members.
* exit.c (pthread_exit): Fix indirection mistake.
* implement.h (_PTHREAD_THREADS_TABLE_INDEX): Add.
* exit.c (_pthread_vacuum): Fix incorrect args to
_pthread_handler_pop_all() calls.
Make thread entry removal conditional.
* sync.c (pthread_join): Add multiple join and async detach handling.
* implement.h (_PTHREAD_THREADS_TABLE_INDEX): Add.
* global.c (_pthread_threads_mutex_table): Add.
* implement.h (_pthread_once_flag): Remove.
(_pthread_once_lock): Ditto.
(_pthread_threads_mutex_table): Add.
* global.c (_pthread_once_flag): Remove.
(_pthread_once_lock): Ditto.
* sync.c (pthread_join): Fix tests involving new return value
from _pthread_find_thread_entry().
(pthread_detach): Ditto.
* private.c (_pthread_find_thread_entry): Failure return code
changed from -1 to NULL.
|
|
pthread.h.
* pthread.h: Move implementation hidden definitions into
implement.h.
* implement.h: Move implementation hidden definitions from
pthread.h. Add constants to index into the different handler stacks.
* cleanup.c (_pthread_handler_push): Simplify args. Restructure.
(_pthread_handler_pop): Simplify args. Restructure.
(_pthread_handler_pop_all): Simplify args. Restructure.
|