| Age | Commit message (Collapse) | Author | 
|---|
|  | * mutex.c (pthread_mutex_destroy): Free mutex memory.
        - Milan Gardian <mg@tatramed.sk> | 
|  | * exit.c (pthread_exit): Fix reference to potentially
        uninitialised pointer.
1999-08-21  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * private.c (_pthread_threadStart): Apply fix of 1999-08-19
        this time to C++ and non-trapped C versions. Ommitted to
        do this the first time through.
tests/ChangeLog:
Aug 22 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * runall.bat (join2): Add test. | 
|  | * private.c (_pthread_threadStart): Return exit status from
        the application thread startup routine.
        - Milan Gardian <mg@tatramed.sk>
1999-08-18  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * exit.c (pthread_exit): Put status into pthread_t->exitStatus
        - John Bossom <john.Bossom@cognos.com>
        * private.c (_pthread_threadStart): Set pthread->exitStatus
        on exit of try{} block.
        - John Bossom <john.Bossom@cognos.com>
        * sync.c (pthread_join): use pthread_exitStatus value if the
        thread exit doesn't return a value (for Mingw32 CRTDLL
        which uses endthread instead of _endthreadex).
        - John Bossom <john.Bossom@cognos.com>
Tue Aug 17 20:17:58 CDT 1999  Mumit Khan  <khan@xraylith.wisc.edu>
        * create.c (pthread_create): Add CRTDLL suppport.
        * exit.c (pthread_exit): Likewise.
        * private.c (_pthread_threadStart): Likewise.
        (_pthread_threadDestroy): Likewise.
        * sync.c (pthread_join): Likewise.
        * tests/join1.c (main): Warn about partial support for CRTDLL.
Tue Aug 17 20:00:08 1999  Mumit Khan  <khan@xraylith.wisc.edu>
        * Makefile.in (LD): Delete entry point.
        * acconfig.h (STDCALL): Delete unused macro.
        * configure.in: Remove test for STDCALL.
        * config.h.in: Regenerate.
        * errno.c (_errno): Fix self type.
        * pthread.h (PT_STDCALL): Move from here to
        * implement.h (PT_STDCALL): here.
        (_pthread_threadStart): Fix prototype.
        * private.c (_pthread_threadStart): Likewise.
1999-08-14  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * exit.c (pthread_exit): Don't call pthread_self() but
        get thread handle directly from TSD for efficiency. | 
|  | * exit.c (pthread_exit): Don't call pthread_self() but
        get thread handle directly for efficiency. | 
|  | 1999-08-12  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * private.c (_pthread_threadStart): ei[] only declared if _MSC_VER.
tests/ChangeLog:
Wed Aug 12 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * Makefile (LIBS): Add -L. | 
|  |  | 
|  | * semaphore.h (mode_t): Conditionally typedef it. | 
|  | Sat May  8 09:42:30 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
	* pthread.def (sem_open): Add.
	(sem_close): Add.
	(sem_unlink): Add.
	(sem_getvalue): Add.
	* FAQ (Question 3): Add.
Thu Apr  8 01:16:23 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
	* semaphore.c (sem_open): New function; returns an error (ENOSYS).
	(sem_close): ditto.
	(sem_unlink): ditto.
	(sem_getvalue): ditto.
	* semaphore.h (_POSIX_SEMAPHORES): define.
./tests/ChangeLog
Sat May 29 23:29:04 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * runall.bat (condvar5): Add new test.
        * runall.bat (condvar6): Add new test.
        * Makefile (condvar5) : Add new test.
        * Makefile (condvar6) : Add new test.
        * condvar5.c: New test for pthread_cond_broadcast().
        * condvar6.c: New test for pthread_cond_broadcast(). | 
|  | * condvar.c (pthread_cond_broadcast): Fix possible memory fault
        - Mark E. Armstrong <avail@pacbell.net>
Thu May 27 13:08:46 1999  Ross Johnson  <rpj@swan.canberra.edu.au>
        * condvar.c (pthread_cond_broadcast): Fix logic bug
        - Peter Slacik <Peter.Slacik@tatramed.sk>;
        optimise sem_post loop
        - Bossom, John <John.Bossom@Cognos.COM>. | 
|  | * attr.c (pthread_attr_setdetachstate): Fix logic bug. | 
|  | * errno.c (_REENTRANT || _MT): Invert #if condition.
        * pthread.h (_errno): Conditionally include prototype. | 
|  | * *.c (comments): Remove individual attributions - these are
        documented sufficiently elsewhere.
        * implement.h (pthread.h): Remove extraneous include. | 
|  | Sun Apr  4 11:05:57 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * sched.c (sched.h): Include.
        * sched.h: New file for POSIX 1b scheduling.
        * pthread.h: Move opaque structures to implement.h; move sched_*
        prototypes out and into sched.h.
        * implement.h: Add opaque structures from pthread.h.
        * sched.c (sched_yield): New function.
        * condvar.c (_pthread_sem_*): Rename to sem_*; except for
        _pthread_sem_timedwait which is an private function.
Sat Apr  3 23:28:00 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * Makefile.in (OBJS): Add errno.o.
Fri Apr  2 11:08:50 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * implement.h (_pthread_sem_*): Remove prototypes now defined in
        semaphore.h.
        * pthread.h (sempahore.h): Include.
        * semaphore.h: New file for POSIX 1b semaphores.
        * pthread.h (_pthread_sem_t): Change to sem_t.
        * semaphore.c (_pthread_sem_*): Change to sem_*; these functions
        will be exported from the library; set errno on error.
        - John Bossom <jebossom@cognos.com>
        (_pthread_sem_timedwait): Moved to private.c.
        * private.c (_pthread_sem_timedwait): Moved from semaphore.c;
        set errno on error.
        * errno.c (_errno): New file. New function.
        - John Bossom
        * pthread.h (pthread_t_): Add per-thread errno element.
tests/ChangeLog
Sun Apr  4 12:04:28 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * tsd1.c (mythread): Change Sleep(0) to sched_yield().
        (sched.h): Include.
        * condvar3.c (mythread): Remove redundant Sleep().
        * runtest.bat: Re-organised to make more informative. | 
|  | * semaphore.c (_pthread_sem_timedwait): Check for negative
        milliseconds.
        - Tor Lillqvist <tml@iki.fi> | 
|  | * misc.c (CancelableWait): Initialise exceptionInformation[2].
	(pthread_self): Get a real Win32 thread handle for implicit threads.
	* cancel.c (pthread_testcancel): Initialise exceptionInformation[2].
	* implement.h (SE_INFORMATION): Fix values.
	* private.c (_pthread_threadDestroy): Close the thread handle.
Fri Mar 19 12:57:27 1999  Ross Johnson  <rpj@swan.canberra.edu.au>
	* cancel.c (comments): Update and cleanup.
Fri Mar 19 09:12:59 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
	* private.c (_pthread_threadStart): status returns PTHREAD_CANCELED.
	* pthread.h (PTHREAD_CANCELED): defined. | 
|  | Fri Mar 19 09:12:59 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * private.c (_pthread_threadStart): status returns PTHREAD_CANCELED.
        * pthread.h (PTHREAD_CANCELED): defined.
==> tests/ChangeLog <==
Fri Mar 19 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * *.bat: redirect unwanted output to nul:
        * runall.bat: new.
        * cancel1.c: new. Not part of suite yet. | 
|  | * all: Add GNU LGPL and Copyright and Warranty. | 
|  | * condvar.c (pthread_cond_init): fix possible uninitialised use
        of cv.
Sun Mar 14 21:01:59 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * condvar.c (pthread_cond_destroy): don't do full cleanup if
        static initialised cv has never been used.
        (cond_timedwait): check result of auto-initialisation.
tests/ChangeLog
Mon Mar 15 00:17:55 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * mutex1.c: only test mutex init and destroy; add assertions.
        * count1.c: raise number of spawned threads to 60 (appears to
        be the limit under Win98).
Sun Mar 14 21:31:02 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * test.h (assert): add assertion trace option.
        Use:
        "#define ASSERT_TRACE 1" to turn it on,
        "#define ASSERT_TRACE 0" to turn it off (default).
        * condvar3.c (main): add more assertions.
        * condvar4.c (main): add more assertions.
        * condvar1.c (main): add more assertions. | 
|  | * pthread.h (pthread_mutex_t): revert to (pthread_mutex_t *);
        define a value to serve as PTHREAD_MUTEX_INITIALIZER.
        (pthread_mutex_t_): remove staticinit and valid elements.
        (pthread_cond_t): revert to (pthread_cond_t_ *);
        define a value to serve as PTHREAD_COND_INITIALIZER.
        (pthread_cond_t_): remove staticinit and valid elements.
        * mutex.c (pthread_mutex_t args): adjust indirection of references.
        (all functions): check for PTHREAD_MUTEX_INITIALIZER value;
        check for NULL (invalid).
        * condvar.c (pthread_cond_t args): adjust indirection of references.
        (all functions): check for PTHREAD_COND_INITIALIZER value;
        check for NULL (invalid).
Wed Mar 10 17:18:12 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * misc.c (CancelableWait): Undo changes from Mar 8 and 7.
tests/ChangeLog
Fri Mar 12 08:34:15 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * eyal1.c (main): Fix trylock loop; was not waiting for thread to lock
        the "started" mutex. | 
|  |  | 
|  | * 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. | 
|  | * pthread.h (PTHREAD_MUTEX_INITIALIZER): missing braces around
        cs element initialiser.
Bring some tests up-to-date. | 
|  | * pthread.h (pthread_exit): The return type of this function is
	void, not int.
	* exit.c (pthread_exit): Do not return 0. | 
|  | * 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. | 
|  | * sync.c (pthread_join): Fix pthread_equal() test.
        * mutex.c (pthread_mutex_trylock): Check mutex != NULL before
        using it. | 
|  | * misc.c (pthread_equal): Fix inverted result. | 
|  | * 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. | 
|  | * pthread.h (struct pthread_once_t_): Remove redefinition. | 
|  | * 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. | 
|  | * misc.c (CancelableWait): Change C++ exception throw.
        * sync.c (pthread_join): Change FIXME comment - issue resolved. | 
|  | * configure: Various temporary changes.
	- Kevin Ruland <Kevin.Ruland@anheuser-busch.com>
	* README: Update. | 
|  | * pthread.def (pthread_attr_getstackaddr): uncomment
	(pthread_attr_setstackaddr): uncomment | 
|  | * global.c: Remove Pthread_exception instantiation.
        * cancel.c (pthread_testcancel): Change C++ exception throw.
        * implement.h: Remove extern declaration. | 
|  | * 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(). | 
|  | * sync.c (pthread_join): Check for NULL value_ptr arg;
	check for detached threads. | 
|  | 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. | 
|  | 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. | 
|  | * pthread.h (PTHREAD_MUTEX_AUTO_CS_NP): New.
        (PTHREAD_MUTEX_FORCE_CS_NP): New. | 
|  | * README: Updated. | 
|  | * 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. | 
|  | * 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> | 
|  | * 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. | 
|  | * 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(). | 
|  | * 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. | 
|  | * 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. | 
|  | * condvar.c (pthread_cond_init): Invert logic when testing the
        return value from calloc(). | 
|  | * 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>. | 
|  | 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. | 
|  | This will be tagged as snapshot-1999-01-04-1305 | 
|  | * README: Update info about subscribing to the mailing list. |