summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
1999-03-08Resolve merge conflicts; minor comment changes.rpj
1999-03-07Mon Mar 8 11:18:59 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* misc.c (CancelableWait): Ensure cancelEvent handle is the lowest indexed element in the handles array. Enhance test for abandoned objects. * pthread.h (PTHREAD_MUTEX_INITIALIZER): Trailing elements not initialised are set to zero by the compiler. This avoids the problem of initialising the opaque critical section element in it. (PTHREAD_COND_INITIALIZER): Ditto. * semaphore.c (_pthread_sem_timedwait): Check sem == NULL earlier. Sun Mar 7 12:31:14 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * condvar.c (pthread_cond_init): set semaphore initial value to 0, not 1. cond_timedwait was returning signaled immediately. * misc.c (CancelableWait): Place the cancel event handle first in the handle table for WaitForMultipleObjects. This ensures that the cancel event is recognised and acted apon if both objects happen to be signaled together. * private.c (_pthread_cond_test_init_lock): Initialise and destroy. * implement.h (_pthread_cond_test_init_lock): Add extern. * global.c (_pthread_cond_test_init_lock): Add declaration. * condvar.c (pthread_cond_destroy): check for valid initialised CV; flag destroyed CVs as invalid. (pthread_cond_init): pthread_cond_t is no longer just a pointer. This is because PTHREAD_COND_INITIALIZER needs state info to reside in pthread_cond_t so that it can initialise on first use. Will work on making pthread_cond_t (and other objects like it) opaque again, if possible, later. (cond_timedwait): add check for statically initialisation of CV; initialise on first use. (pthread_cond_signal): check for valid CV. (pthread_cond_broadcast): check for valid CV. (_cond_check_need_init): Add. * pthread.h (PTHREAD_COND_INITIALIZER): Fix. (pthread_cond_t): no longer a pointer to pthread_cond_t_. (pthread_cond_t_): add 'staticinit' and 'valid' elements. tests/ChangeLog Sun Mar 7 10:41:52 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * Makefile (condvar3, condvar4): Add tests. * condvar4.c (General): Reduce to simple test case; prerequisite is condvar3.c; add description. * condvar3.c (General): Reduce to simple test case; prerequisite is condvar2.c; add description. * condvar2.c (General): Reduce to simple test case; prerequisite is condvar1.c; add description. * condvar1.c (General): Reduce to simple test case; add description. * Template.c (Comments): Add generic test detail.
1999-03-06Sun Mar 7 10:41:52 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* Makefile (condvar3, condvar4): Add tests.
1999-03-06Sun Mar 7 10:41:52 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* condvar4.c (General): Reduce to simple test case; prerequisite is condvar3.c; add description. * condvar3.c (General): Reduce to simple test case; prerequisite is condvar2.c; add description. * condvar2.c (General): Reduce to simple test case; prerequisite is condvar1.c; add description. * condvar1.c (General): Reduce to simple test case; add description. * Template.c (Comments): Add generic test detail.
1999-02-22ðrpj
1999-02-221999-02-23 Ross Johnson <rpj@ise.canberra.edu.au>rpj
* Template.c: Revamp. * condvar1.c: Add. * condvar2.c: Add. * Makefile: Add condvar1 condvar2 tests. * exit1.c, exit2.c, exit3.c: Cosmetic changes.
1999-02-221999-02-23 Ross Johnson <rpj@ise.canberra.edu.au>rpj
* Makefile: Some refinement. * *.c: More exhaustive checking through assertions; clean up; add some more tests.
1999-02-211999-02-23 Ross Johnson <rpj@ise.canberra.edu.au>rpj
* Makefile: Now actually runs the tests. * tests.h: Define our own assert macro. The Mingw32 version pops up a dialog but we want to run non-interactively. * equal1.c: use assert a little more directly so that it prints the actual call statement. * exit1.c: Modify to return 0 on success, 1 on failure.
1999-02-21Sun Feb 21 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* pthread.h (PTHREAD_MUTEX_INITIALIZER): missing braces around cs element initialiser. Bring some tests up-to-date.
1999-02-201999-02-21 Ben Elliston <bje@cygnus.com>snap-1999-02-21bje
* README: Update. * Makefile: New file. Run all tests automatically. Primitive tests are run first; more complex tests are run last. * count1.c: New test. Validate the thread count. * exit2.c: Perform a simpler test. * exit3.c: New test. Replaces exit2.c, since exit2.c needs to perform simpler checking first. * create1.c: Update to use the new testsuite exiting convention. * equal1.c: Likewise. * mutex1.c: Likewise. * mutex2.c: Likewise. * once1.c: Likewise. * self2.c: Likewise. * self3.c: Likewise. * tsd1.c: Likewise.
1999-02-201999-02-21 Ben Elliston <bje@cygnus.com>bje
* pthread.h (pthread_exit): The return type of this function is void, not int. * exit.c (pthread_exit): Do not return 0.
1999-02-201999-02-20 Ross Johnson <rpj@ise.canberra.edu.au>rpj
* tests/mutex2.c: Test static mutex initialisation. * tests/test.h: New. Declares a table mapping error numbers to error names.
1999-02-20Sat Feb 20 16:03:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* dll.c (DLLMain): Expand TryEnterCriticalSection support test. * mutex.c (pthread_mutex_trylock): The check for _pthread_try_enter_critical_section == NULL should have been removed long ago.
1999-02-19Fri Feb 19 16:2s1703:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* sync.c (pthread_join): Fix pthread_equal() test. * mutex.c (pthread_mutex_trylock): Check mutex != NULL before using it.
1999-02-18Update README.snap-1999-02-19rpj
1999-02-18Sat Feb 18 16:2s1703:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* misc.c (pthread_equal): Fix inverted result.
1999-02-18Add tests/README.rpj
1999-02-18Add new compiler specific scripts for running tests.rpj
1999-02-18Sat Feb 18 16:2s1703:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* Makefile.in: Use libpthread32.a as the name of the DLL export library instead of pthread.lib. * condvar.c (pthread_cond_init): cv could have been used unitialised; initialise. * create.c (pthread_create): parms could have been used unitialised; initialise. Add "Makefile" for people who don't want to (or can't) run ./configure.
1999-02-17Add config.h. This file is generated by running the configure script.rpj
It is being added for those not building under Cygwin or similar environment and who therefore can't run ./configure.
1999-02-17Sat Feb 18 16:2s1703:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* pthread.h (struct pthread_once_t_): Remove redefinition.
1999-02-12Sat Feb 13 03:03:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* pthread.h (struct pthread_once_t_): Replaced. * misc.c (pthread_once): Replace with John Bossom's version; has lighter weight serialisation; fixes problem of not holding competing threads until after the init_routine completes.
1999-02-10Update FAQ and MAINTAINERS.rpj
1999-02-10Thu Feb 11 13:34:14 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* misc.c (CancelableWait): Change C++ exception throw. * sync.c (pthread_join): Change FIXME comment - issue resolved.
1999-02-10Merged from precompiled branch. Don't mind me!bje
1999-02-09Wed Feb 10 12:49:11 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>snap-1999-02-10rpj
* configure: Various temporary changes. - Kevin Ruland <Kevin.Ruland@anheuser-busch.com> * README: Update.
1999-02-09Wed Feb 10 12:49:11 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* pthread.def (pthread_attr_getstackaddr): uncomment (pthread_attr_setstackaddr): uncomment
1999-02-09Thu Feb 4 10:07:28 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>snapshot-1999-02-10rpj
* global.c: Remove Pthread_exception instantiation. * cancel.c (pthread_testcancel): Change C++ exception throw. * implement.h: Remove extern declaration.
1999-02-08Fri Feb 5 13:42:30 1999 Ross Johnson <rpj@swan.canberra.edu.au>rpj
* semaphore.c: Comment format changes. Wed Feb 3 13:04:44 1999 Ross Johnson <rpj@swan.canberra.edu.au> * cleanup.c: Rename _pthread_*_cleanup() to pthread_*_cleanup(). * pthread.def: Ditto. * pthread.h: Ditto. * pthread.def (pthread_cleanup_push): Remove from export list; the function is defined as a macro under all compilers. (pthread_cleanup_pop): Ditto. * pthread.h: Remove #if defined().
1999-02-02Wed Feb 3 10:13:48 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* sync.c (pthread_join): Check for NULL value_ptr arg; check for detached threads.
1999-02-02Mods to compile under Mingw32 egcs.rpj
Tue Feb 2 18:07:43 1999 Ross Johnson <rpj@swan.canberra.edu.au> * implement.h: Add #include <pthread.h>. Change sem_t to _pthread_sem_t. Various patches by Kevin Ruland <Kevin.Ruland@anheuser-busch.com> * signal.c (pthread_sigmask): Add and modify casts. Reverse LHS/RHS bitwise assignments. * pthread.h: Remove #include <semaphore.h>. (_PTHREAD_ATTR_VALID): Add cast. (struct pthread_t_): Add sigmask element. * dll.c: Add "extern C" for DLLMain. (DllMain): Add cast. * create.c (pthread_create): Set sigmask in thread. * condvar.c: Remove #include. Change sem_* to _pthread_sem_*. * attr.c: Changed #include. * Makefile.in: Additional targets and changes to build the library as a DLL. Fri Jan 29 11:56:28 1999 Ross Johnson <rpj@swan.canberra.edu.au> * Makefile.in (OBJS): Add semaphore.o to list. * semaphore.c (_pthread_sem_timedwait): Move from private.c. Rename sem_* to _pthread_sem_*. * pthread.h (pthread_cond_t): Change type of sem_t. _POSIX_SEMAPHORES no longer defined. * semaphore.h: Contents moved to implement.h. Removed from source tree. * implement.h: Add semaphore function prototypes and ename all functions to prepend '_pthread_'. They are now private to the pthreads-win32 implementation. * private.c: Change #warning. Move _pthread_sem_timedwait() to semaphore.c. * cleanup.c: Change #warning. * misc.c: Remove #include <errno.h> * pthread.def: Cleanup CVS merge conflicts. * global.c: Ditto. * ChangeLog: Ditto. * cleanup.c: Ditto.
1999-01-23Fixing problems building with GNU compilers:rpj
Sun Jan 24 01:34:52 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * semaphore.c (sem_wait): Remove second arg to pthreadCancelableWait() call. Fri Jan 22 14:31:59 1999 Ross Johnson <rpj@swan.canberra.edu.au> * Makefile.in (CFLAGS): Remove -fhandle-exceptions. Not needed with egcs. Add -g for debugging. * create.c (pthread_create): Replace __stdcall with PT_STDCALL macro. This is a hack and must be fixed. * misc.c (CancelableWait): Remove redundant statement. * mutex.c (pthread_mutexattr_init): Cast calloc return value. * misc.c (CancelableWait): Add cast. (pthread_self): Add cast. * exit.c (pthread_exit): Add cast. * condvar.c (pthread_condattr_init): Cast calloc return value. * cleanup.c: Reorganise conditional compilation. * attr.c (pthread_attr_init): Remove unused 'result'. Cast malloc return value. * private.c (_pthread_callUserDestroyRoutines): Redo conditional compilation. * misc.c (CancelableWait): C++ version uses 'throw'. * cancel.c (pthread_testcancel): Ditto. * implement.h (class pthread_exception): Define for C++. * pthread.h: Fix C, C++, and Win32 SEH condition compilation mayhem around pthread_cleanup_* defines. C++ version now uses John Bossom's cleanup handlers. (pthread_attr_t): Make 'valid' unsigned. Define '_timeb' as 'timeb' for Ming32. Define PT_STDCALL as nothing for Mingw32. May be temporary. * cancel.c (pthread_testcancel): Cast return value.
1999-01-22Sat Jan 23 17:36:40 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>snapshot-1999-01-23rpj
* pthread.h (PTHREAD_MUTEX_AUTO_CS_NP): New. (PTHREAD_MUTEX_FORCE_CS_NP): New.
1999-01-22Sat Jan 23 17:36:40 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* README: Updated.
1999-01-20Wed Jan 20 09:31:28 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* pthread.h (pthread_mutexattr_t): Changed to a pointer. * mutex.c (pthread_mutex_init): Conditionally create Win32 mutex - from John Bossom's implementation. (pthread_mutex_destroy): Conditionally close Win32 mutex - from John Bossom's implementation. (pthread_mutexattr_init): Replaced by John Bossom's version. (pthread_mutexattr_destroy): Ditto. (pthread_mutexattr_getpshared): New function from John Bossom's implementation. (pthread_mutexattr_setpshared): New function from John Bossom's implementation. Tue Jan 19 18:27:42 1999 Ross Johnson <rpj@swan.canberra.edu.au> * pthread.h (pthreadCancelableTimedWait): New prototype. (pthreadCancelableWait): Remove second argument. * misc.c (CancelableWait): New static function is pthreadCancelableWait() renamed. (pthreadCancelableWait): Now just calls CancelableWait() with INFINITE timeout. (pthreadCancelableTimedWait): Just calls CancelableWait() with passed in timeout. * private.c (_pthread_sem_timedwait): 'abstime' arg really is absolute time. Calculate relative time to wait from current time before passing timeout to new routine pthreadCancelableTimedWait(). - Scott Lightner <scott@curriculum.com> Tue Jan 19 10:27:39 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * pthread.h (pthread_mutexattr_setforcecs_np): New prototype. * mutex.c (pthread_mutexattr_init): Init 'pshared' and 'forcecs' attributes to 0. (pthread_mutexattr_setforcecs_np): New function (not portable). * pthread.h (pthread_mutex_t): Add 'mutex' element. Set to NULL in PTHREAD_MUTEX_INITIALIZER. The pthread_mutex_*() routines will try to optimise performance by choosing either mutexes or critical sections as the basis for pthread mutexes for each indevidual mutex. (pthread_mutexattr_t_): Add 'forcecs' element. Some applications may choose to force use of critical sections if they know that:- the mutex is PROCESS_PRIVATE and, either the OS supports TryEnterCriticalSection() or pthread_mutex_trylock() will never be called on the mutex. This attribute will be setable via a non-portable routine. Note: We don't yet support PROCESS_SHARED mutexes, so the implementation as it stands will default to Win32 mutexes only if the OS doesn't support TryEnterCriticalSection. On Win9x, and early versions of NT 'forcecs' will need to be set in order to get critical section based mutexes. Sun Jan 17 12:01:26 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * pthread.h (PTHREAD_MUTEX_INITIALIZER): Init new 'staticinit' value to '1' and existing 'valid' value to '1'. * global.c (_pthread_mutex_test_init_lock): Add. * implement.h (_pthread_mutex_test_init_lock.): Add extern. * private.c (_pthread_processInitialize): Init critical section for global lock used by _mutex_check_need_init(). (_pthread_processTerminate): Ditto (:s/Init/Destroy/). * dll.c (dllMain): Move call to FreeLibrary() so that it is only called once when the process detaches. * mutex.c (_mutex_check_need_init): New static function to test and init PTHREAD_MUTEX_INITIALIZER mutexes. Provides serialised access to the internal state of the uninitialised static mutex. Called from pthread_mutex_trylock() and pthread_mutex_lock() which do a quick unguarded test to check if _mutex_check_need_init() needs to be called. This is safe as the test is conservative and is repeated inside the guarded section of _mutex_check_need_init(). Thus in all calls except the first calls to lock static mutexes, the additional overhead to lock any mutex is a single memory fetch and test for zero. * pthread.h (pthread_mutex_t_): Add 'staticinit' member. Mutexes initialised by PTHREAD_MUTEX_INITIALIZER aren't really initialised until the first attempt to lock it. Using the 'valid' flag (which flags the mutex as destroyed or not) to record this information would be messy. It is possible for a statically initialised mutex such as this to be destroyed before ever being used. * mutex.c (pthread_mutex_trylock): Call _mutex_check_need_init() to test/init PTHREAD_MUTEX_INITIALIZER mutexes. (pthread_mutex_lock): Ditto. (pthread_mutex_unlock): Add check to ensure we don't try to unlock an unitialised static mutex. (pthread_mutex_destroy): Add check to ensure we don't try to delete a critical section that we never created. Allows us to destroy a static mutex that has never been locked (and hence initialised). (pthread_mutex_init): Set 'staticinit' flag to 0 for the new mutex.
1999-01-18Tue Jan 19 18:27:42 1999 Ross Johnson <rpj@swan.canberra.edu.au>rpj
* pthread.h (pthreadCancelableTimedWait): New prototype. (pthreadCancelableWait): Remove second argument. * misc.c (CancelableWait): New static function is pthreadCancelableWait() renamed. (pthreadCancelableWait): Now just calls CancelableWait() with INFINITE timeout. (pthreadCancelableTimedWait): Just calls CancelableWait() with passed in timeout. * private.c (_pthread_sem_timedwait): 'abstime' arg really is absolute time. Calculate relative time to wait from current time before passing timeout to new routine pthreadCancelableTimedWait(). - Scott Lightner <scott@curriculum.com>
1999-01-16Sun Jan 17 12:01:26 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>snapshot-1999-01-17rpj
* private.c (_pthread_sem_timedwait): Move from semaphore.c. * semaphore.c : Remove redundant #includes. (_pthread_sem_timedwait): Move to private.c. (sem_wait): Add missing abstime arg to pthreadCancelableWait() call. 1999-01-17 Ross Johnson <rpj@ise.canberra.edu.au> * runtest: New script to build and run a test in the tests directory.
1999-01-14Fri Jan 15 15:41:28 1999 Ross Johnson <rpj@swan.canberra.edu.au>rpj
* pthread.h: Add new 'abstime' arg to pthreadCancelableWait() prototype. * condvar.c (cond_timedwait): New generalised function called by both pthread_cond_wait() and pthread_cond_timedwait(). This is essentially pthread_cond_wait() renamed and modified to add the 'abstime' arg and call the new _pthread_sem_timedwait() instead of sem_wait(). (pthread_cond_wait): Now just calls the internal static function cond_timedwait() with an INFINITE wait. (pthread_cond_timedwait): Now implemented. Calls the internal static function cond_timedwait(). * implement.h (_pthread_sem_timedwait): New internal function prototype. * misc.c (pthreadCancelableWait): Added new 'abstime' argument to allow shorter than INFINITE wait. * semaphore.c (_pthread_sem_timedwait): New function for internal use. This is essentially sem_wait() modified to add the 'abstime' arg and call the modified (see above) pthreadCancelableWait().
1999-01-13Thu Jan 14 14:27:13 1999 Ross Johnson <rpj@swan.canberra.edu.au>rpj
* cleanup.c: Correct _cplusplus to __cplusplus wherever used. * Makefile.in: Add CC=g++ and add -fhandle-exceptions to CFLAGS. The derived Makefile will compile all units of the package as C++ so that those which include try/catch exception handling should work properly. The package should compile ok if CC=gcc, however, exception handling will not be included and thus thread cancellation, for example, will not work. * cleanup.c (_pthread_pop_cleanup): Add #warning to compile this file as C++ if using a cygwin32 environment. Perhaps the whole package should be compiled using g++ under cygwin. * private.c (_pthread_threadStart): Change #error directive into #warning and bracket for __CYGWIN__ and derivative compilers.
1999-01-12Wed Jan 13 09:34:52 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* build.bat: Delete old binaries before compiling/linking. Tue Jan 12 09:58:38 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * dll.c: The Microsoft compiler pragmas probably are more appropriately protected by _MSC_VER than by _WIN32. - Tor Lillqvist <tml@iki.fi>. * condvar.c (pthread_cond_timedwait): Fix function description comments. * pthread.h: Define ETIMEDOUT. This should be returned by pthread_cond_timedwait which is not implemented yet as of snapshot-1999-01-04-1305. It was implemented in the older version. The Microsoft compiler pragmas probably are more appropriately protected by _MSC_VER than by _WIN32. - Tor Lillqvist <tml@iki.fi>. * pthread.def: pthread_mutex_destroy was missing from the def file - Tor Lillqvist <tml@iki.fi>. * condvar.c (pthread_cond_broadcast): Ensure we only wait on threads if there were any waiting on the condition. I think pthread_cond_broadcast should do the WaitForSingleObject only if cv->waiters > 0? Otherwise it seems to hang, at least in the testg thread program from glib. - Tor Lillqvist <tml@iki.fi>. * semaphore.c (sem_post): Correct typo in comment. Mon Jan 11 20:33:19 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * pthread.h: Re-arrange conditional compile of pthread_cleanup-* macros. * cleanup.c (_pthread_push_cleanup): Provide conditional compile of cleanup->prev.
1999-01-101999-01-11 Ben Elliston <bje@cygnus.com>bje
* condvar.c (pthread_cond_init): Invert logic when testing the return value from calloc().
1999-01-08Sat Jan 9 14:32:08 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* implement.h: Compile-time switch for CYGWIN derived environments to use CreateThread instead of _beginthreadex. Ditto for ExitThread. Patch provided by Anders Norlander <anorland@hem2.passagen.se>.
1999-01-04Parts of this package are going to have to be C++ in the GNU world because werpj
now use exception handling to implement thread cancellation. The MSC compiler appears to know about __try/__except blocks, but gcc (ie. the GNU ANSI C compiler) doesn't know about the equivalent C++ try/catch blocks. This should not be a problem since gcc and g++ are nearly always available together. Some file names may need to change in the CVS repository however. Tue Jan 5 16:33:04 1999 Ross Johnson <rpj@swan.canberra.edu.au> * cleanup.c (_pthread_pop_cleanup): Add C++ version of __try/__except block. Move trailing "}" out of #ifdef _WIN32 block left there by (my) mistake. * private.c: Remove #include <errno.h> which is included by pthread.h.
1999-01-03Merge John Bossom's code into the main trunk. See ChangeLog for details.snapshot-1999-01-04-1305rpj
This will be tagged as snapshot-1999-01-04-1305
1998-12-101998-12-11 Ben Elliston <bje@toilet.to.cygnus.com>bje
* README: Update info about subscribing to the mailing list.
1998-12-09New file.rpj
Q 1 How do I get pthreads-win32 to link under Cygwin32 or Mingw32?
1998-12-06Mon Dec 7 09:44:40 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>final-pre-bossomrpj
* dll.c (PthreadsEntryPoint): Cast return value of GetProcAddress to resolve compile warning from MSVC.
1998-12-06Sun Dec 6 21:54:35 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* 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.
1998-12-06Sun Dec 6 21:54:35 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>rpj
* 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.
1998-12-06Thu Dec 3 13:32:00 1998 Ross Johnson <rpj@ise.canberra.edu.au>rpj
* README: Correct cygwin32 compatibility statement.