| Age | Commit message (Collapse) | Author | 
|---|
|  |  | 
|  | * pthread.h (rand_r): Fake using _seed argument to quell
	compiler warning (compiler should optimise this away later).
	* GNUmakefile (OPT): Leave symbolic information out of the library
	and increase optimisation level - for smaller faster prebuilt
	dlls.
2001-05-29  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
	Contributed by  - Milan Gardian <Milan.Gardian@LEIBINGER.com>
	* Makefile: fix typo.
	* pthreads.h: Fix problems with stdcall/cdecl conventions, in particular
	remove the need for PT_STDCALL everywhere; remove warning supression.
	* (errno): Fix the longstanding "inconsistent dll linkage" problem
	with errno; now also works with /MD debugging libs -
	warnings emerged when compiling pthreads library with /MD (or /MDd)
	compiler switch, instead of /MT (or /MTd) (i.e. when compiling pthreads
	using Multithreaded DLL CRT instead of Multithreaded statically linked
	CRT).
	* create.c (pthread_create): Likewise; fix typo.
	* private.c (ptw32_threadStart): Eliminate use of terminate() which doesn't
	throw exceptions.
	* Remove unnecessary #includes from a number of modules -
	[I had to #include malloc.h in implement.h for gcc - rpj].
2001-05-29  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
	Contributed by 	- Thomas Pfaff <tpfaff@gmx.net>
	* pthread.h (PTHREAD_MUTEX_DEFAULT): New; equivalent to
	PTHREAD_MUTEX_DEFAULT_NP.
	* (PTHREAD_MUTEX_NORMAL): Similarly.
	* (PTHREAD_MUTEX_ERRORCHECK): Similarly.
	* (PTHREAD_MUTEX_RECURSIVE): Similarly.
	* (pthread_mutex_setdefaultkind_np): New; Linux compatibility stub
	for pthread_mutexattr_settype.
	* (pthread_mutexattr_getkind_np): New; Linux compatibility stub
	for pthread_mutexattr_gettype.
	* mutex.c (pthread_mutexattr_settype): New; allow
	the following types of mutex:
	  PTHREAD_MUTEX_DEFAULT_NP
	  PTHREAD_MUTEX_NORMAL_NP
	  PTHREAD_MUTEX_ERRORCHECK_NP
	  PTHREAD_MUTEX_RECURSIVE_NP
	* Note that PTHREAD_MUTEX_DEFAULT is equivalent to
	PTHREAD_MUTEX_NORMAL - ie. mutexes should no longer
	be recursive by default, and a thread will deadlock if it
	tries to relock a mutex it already owns. This is inline with
	other pthreads implementations.
	* (pthread_mutex_lock): Process the lock request
	according to the mutex type.
	* (pthread_mutex_init): Eliminate use of Win32 mutexes as the
	basis of POSIX mutexes - instead, a combination of one critical section
	and one semaphore are used in conjunction with Win32 Interlocked* routines.
	* (pthread_mutex_destroy): Likewise.
	* (pthread_mutex_lock): Likewise.
	* (pthread_mutex_trylock): Likewise.
	* (pthread_mutex_unlock): Likewise.
	* Use longjmp/setjmp to implement cancelation when building the library
	using a C compiler which doesn't support exceptions, e.g. gcc -x c (note
	that gcc -x c++ uses exceptions).
	* Also fixed some of the same typos and eliminated PT_STDCALL as
	Milan Gardian's patches above.
2001-02-07  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	Contributed by  - Alexander Terekhov <TEREKHOV@de.ibm.com>
	* rwlock.c: Revamped.
	* implement.h (pthread_rwlock_t_): Redefined.
	This implementation does not have reader/writer starvation problem.
	Rwlock attempts to behave more like a normal mutex with
	races and scheduling policy determining who is more important;
	It also supports recursive locking,
	has less synchronization overhead (no broadcasts at all,
	readers are not blocked on any condition variable) and seem to
	be faster than the current implementation [W98 appears to be
	approximately 15 percent faster at least - on top of speed increase
	from Thomas Pfaff's changes to mutex.c - rpj]. | 
|  | 2000-12-29  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * Makefile: Back-out "for" loops which don't work.
        * GNUmakefile: Remove the fake.a target; add the "realclean"
        target; don't remove built libs under the "clean" target.
        * config.h: Add a guard against multiple inclusion.
        * semaphore.h: Add some defines from config.h to make
        semaphore.h independent of config.h when building apps.
        * pthread.h (_errno): Back-out previous fix until we know how to
        fix it properly.
        * implement.h (lockCount): Add missing element to pthread_mutex_t_.
        * sync.c (pthread_join): Spelling fix in comment.
        * private.c (ptw32_threadStart): Reset original termination
        function (C++).
        (ptw32_threadStart): Cleanup detached threads early in case
        the library is statically linked.
        (ptw32_callUserDestroyRoutines): Remove [SEH] __try block from
        destructor call so that unhandled exceptions will be passed through
        to the  system; call terminate() from [C++] try block for the same
        reason.
        * tsd.c (pthread_getspecific): Add comment.
        * mutex.c (pthread_mutex_init): Initialise new elements in
        pthread_mutex_t.
        (pthread_mutex_unlock): Invert "pthread_equal()" test.
2000-12-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * semaphore.c (mode_t): Use ifndef HAVE_MODE_T to include definition.
        * config.h.in (HAVE_MODE_T): Added.
        (_UWIN): Start adding defines for the UWIN package.
./tests/ChangeLog:
2000-12-29  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * GNUmakefile: Add mutex4 test; ensure libpthreadw32.a is
        removed for "clean" target.
        * Makefile: Add mutex4 test.
        * exception3.c: Remove SEH code; automatically pass the test
        under SEH (which is an N/A environment).
        * mutex4.c: New test.
        * eyal1.c (do_work_unit): Add a dummy "if" to force the
        optimiser to retain code; reduce thread work loads.
        * condvar8.c (main): Add an additional "assert" for debugging;
        increase pthread_cond_signal timeout. | 
|  | * misc.c (pthread_self): Restore Win32 "last error"
        cleared by TlsGetValue() call in
        pthread_getspecific()
        - "Steven Reddie" <smr@essemer.com.au>
2000-09-20  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
        * mutex.c (pthread_mutex_lock): Record the owner
        of the mutex. This requires also keeping count of
        recursive locks ourselves rather than leaving it
        to Win32 since we need to know when to NULL the
        thread owner when the mutex is unlocked.
        (pthread_mutex_trylock): Likewise.
        (pthread_mutex_unlock): Check that the calling
        thread owns the mutex, decrement the recursive
        lock count, and NULL the owner if zero. Return
        EPERM if the mutex is owned by another thread.
        * implement.h (pthread_mutex_t_): Add ownerThread
        and lockCount members.
        - reported by Arthur Kantor <akantor@bexusa.com> | 
|  | 2000-12-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * private.c (ptw32_threadStart): Unhandled exceptions are
        now passed through to the system to deal with. This is consistent
        with normal Windows behaviour. C++ applications may use
        set_terminate() to override the default behaviour which is
        to call ptw32_terminate(). Ptw32_terminate() cleans up some
        POSIX thread stuff before calling the system default function
        which calls abort(). The users termination function should conform
        to standard C++ semantics which is to not return. It should
        exit the thread (call pthread_exit()) or exit the application.
        * private.c (ptw32_terminate): Added as the default set_terminate()
        function. It calls the system default function after cleaning up
        some POSIX thread stuff.
        * implement.h (ptw32_try_enter_critical_section): Move
        declaration.
        * global.c (ptw32_try_enter_critical_section): Moved
        from dll.c.
        * dll.c: Move process and thread attach/detach code into
        functions in nonportable.c.
        * nonportable.c (pthread_win32_process_attach_np): Process
        attach code from dll.c is now available to static linked
        applications.
        * nonportable.c (pthread_win32_process_detach_np): Likewise.
        * nonportable.c (pthread_win32_thread_attach_np): Likewise.
        * nonportable.c (pthread_win32_thread_detach_np): Likewise.
        * pthread.h: Add new non-portable prototypes for static
        linked applications.
        * GNUmakefile (OPT): Increase optimisation flag and remove
        debug info flag.
        * pthread.def: Add new non-portable exports for static
        linked applications.
2000-12-11  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * FAQ: Update Answer 6 re getting a fully working
        Mingw32 built library.
2000-09-09  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * pthread.h (ctime_r): Fix arg.
./tests/ChangeLog:
2000-12-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * eyal1.c: Increase thread work loads.
        * exception2.c: New test.
        * exception3.c: New test.
        * Makefile: Add new tests exception2.c and exception3.c.
        * GNUmakefile: Likewise.
2000-12-11  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * cleanup3.c: Remove unused variable.
        * cleanup2.c: Likewise.
        * exception1.c: Throw an exception rather than use
        a deliberate zero divide so that catch(...) will
        handle it under Mingw32. Mingw32 now builds the
        library correctly to pass all tests - see Thomas
        Pfaff's detailed instructions re needed changes
        to Mingw32 in the Pthreads-Win32 FAQ. | 
|  | * mutex.c (pthread_mutex_init): Call
        TryEnterCriticalSection through the pointer
        rather than directly so that the dll can load
        on Windows versions that can't resolve the
        function, eg. Windows 95
        - "Jef Gearhart" <jgearhart@tpssys.com> | 
|  |  | 
|  | * cancel.c (pthread_cancel): Must get "self" through
        calling pthread_self() which will ensure a POSIX thread
        struct is built for non-POSIX threads; return an error
        if this fails
        - Ollie Leahy <ollie@mpt.ie>
        (pthread_setcancelstate): Likewise.
        (pthread_setcanceltype): Likewise.
        * misc.c (ptw32_cancelable_wait): Likewise.
        * private.c (ptw32_tkAssocCreate): Remove unused #if 0
        wrapped code.
        * pthread.h (ptw32_get_exception_services_code):
        Needed to be forward declared unconditionally.
2000-09-06  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * cancel.c (pthread_cancel): If called from the main
        thread "self" would be NULL; get "self" via pthread_self()
        instead of directly from TLS so that an implicit
        pthread object is created.
        * misc.c (pthread_equal): Strengthen test for NULLs. | 
|  | * condvar.c (ptw32_cond_wait_cleanup): Ensure that all
        waking threads check if they are the last, and notify
        the broadcaster if so - even if an error occurs in the
        waiter.
        * semaphore.c (_decrease_semaphore): Should be
        a call to ptw32_decrease_semaphore.
        (_increase_semaphore): Should be a call to
        ptw32_increase_semaphore.
        * misc.c (ptw32_cancelable_wait): Renamed from
        CancelableWait.
        (cond_wait_cleanup*): Rename to ptw32_cond_wait_cleanup*.
        (ptw32_cond_timedwait): Add comments. | 
|  | * rwlock.c (_rwlock_check*): Renamed to
	ptw32_rwlock_check*.
	* mutex.c (_mutex_check*): Renamed to ptw32_mutex_check*.
	* condvar.c (cond_timed*): Renamed to ptw32_cond_timed*.
	(_cond_check*): Renamed to ptw32_cond_check*. | 
|  | * private.c (ptw32_throw): Fix exception test;
        move exceptionInformation declaration.
        * tsd.c (pthread_key_create): newkey wrongly declared.
        * pthread.h: Fix comment block. | 
|  | * mutex.c (pthread_mutex_destroy): Check that the mutex isn't
	held; invalidate the mutex as early as possible to avoid
	contention; not perfect - FIXME!
	* rwlock.c (pthread_rwlock_init): Remove redundant assignment
	to "rw".
	(pthread_rwlock_destroy): Invalidate the rwlock before
	freeing up any of it's resources - to avoid contention.
	* private.c (ptw32_tkAssocCreate): Change assoc->lock
	to use a dynamically initialised mutex - only consumes
	a W32 mutex or critical section when first used,
	not before.
	* mutex.c (pthread_mutex_init): Remove redundant assignment
	to "mx".
	(pthread_mutexattr_destroy): Set attribute to NULL
	before freeing it's memory - to avoid contention. | 
|  | * implement.h (PTW32_EPS_CANCEL/PTW32_EPS_EXIT):
	Must be defined for all compilers - used as generic
	exception selectors by ptw32_throw(). | 
|  | * Several: Fix typos from scripted edit session
        yesterday.
        * nonportable.c (pthread_mutexattr_setforcecs_np):
        Moved this function from mutex.c.
        (pthread_getw32threadhandle_np): New function to
        return the win32 thread handle that the POSIX
        thread is using.
        * mutex.c (pthread_mutexattr_setforcecs_np):
        Moved to new file "nonportable.c".
        * pthread.h (PTW32_BUILD): Only redefine __except
        and catch compiler keywords if we aren't building
        the library (ie. PTW32_BUILD is not defined) -
        this is safer than defining and then undefining
        if not building the library.
        * implement.h: Remove __except and catch undefines.
        * Makefile (CFLAGS): Define PTW32_BUILD.
        * GNUmakefile (CFLAGS): Define PTW32_BUILD.
        * All appropriate: Change Pthread_exception* to
        ptw32_exception* to be consistent with internal
        identifier naming.
        * private.c (ptw32_throw): New function to provide
        a generic exception throw for all internal
        exceptions and EH schemes.
        (ptw32_threadStart): pthread_exit() value is now
        returned via the thread structure exitStatus
        element.
        * exit.c (pthread_exit): pthread_exit() value is now
        returned via the thread structure exitStatus
        element.
        * cancel.c (ptw32_cancel_self): Now uses ptw32_throw.
        (pthread_setcancelstate): Ditto.
        (pthread_setcanceltype): Ditto.
        (pthread_testcancel): Ditto.
        (pthread_cancel): Ditto.
        * misc.c (CancelableWait): Ditto.
        * exit.c (pthread_exit): Ditto.
        * All applicable: Change PTW32_ prefix to
        PTW32_ prefix to remove leading underscores
        from private library identifiers. | 
|  | * All applicable: Change _pthread_ prefix to
        ptw32_ prefix to remove leading underscores
        from private library identifiers (single
        and double leading underscores are reserved in the
        ANSI C standard for compiler implementations). | 
|  | * tsd.c (pthread_create_key): Initialise temporary
        key before returning it's address to avoid race
        conditions. | 
|  | * errno.c: Add _MD precompile condition; thus far
        had no effect when using /MD compile option but I
        thnk it should be there.
        * exit.c: Add __cplusplus to various #if lines;
        was compiling SEH code even when VC++ had
        C++ compile options.
        * private.c: ditto.
        * create.c (pthread_create): Add PT_STDCALL macro to
        function pointer arg in _beginthread().
        * pthread.h: PT_STDCALL really does need to be defined
        in both this and impliment.h; don't set it to __cdecl
        - this macro is only used to extend function pointer
        casting for functions that will be passed as parameters.
        (~PThreadCleanup): add cast and group expression.
        (_errno): Add _MD compile conditional.
        (PtW32NoCatchWarn): Change pragma message.
        * implement.h: Move and change PT_STDCALL define.
        * need_errno.h: Add _MD to compilation conditional.
        * GNUmakefile: Substantial rewrite for new naming
        convention; set for nil optimisation (turn it up
        when we have a working library build; add target
        "fake.a" to build a libpthreadw32.a from the VC++
        built DLL pthreadVCE.dll.
        * pthread.def (LIBRARY): Don't specify in the .def
        file - it is specified on the linker command line
        since we now use the same .def file for variously
        named .dlls.
        * Makefile: Substantial rewrite for new naming
        convention; default nmake target only issues a
        help message; run nmake with specific target
        corresponding to the EH scheme being used.
        * README: Update information; add naming convention
        explanation.
        * ANNOUNCE: Update information.
2000-08-12  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * pthread.h: Add compile-time message when using
        MSC_VER compiler and C++ EH to warn application
        programmers to use PtW32Catch instead of catch(...)
        if they want cancelation and pthread_exit to work.
        * implement.h: Remove #include <semaphore.h>; we
        use our own local semaphore.h.
tests/ChangeLog:
2000-08-13  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * condvar3.c: Minor change to eliminate compiler
        warning.
        * condvar4.c: ditto.
        * condvar5.c: ditto.
        * condvar6.c: ditto.
        * condvar7.c: ditto.
        * condvar8.c: ditto.
        * condvar9.c: ditto.
        * exit1.c: Function needed return statement.
        * cleanup1.c: Remove unnecessary printf arg.
        * cleanup2.c: Fix cast.
        * rwlock6.c: Fix casts.
        * exception1.c (PtW32CatchAll): Had the wrong name;
        fix casts.
        * cancel3.c: Remove unused waitLock variable.
        * GNUmakefile: Change library/dll naming; add new tests;
        general minor changes.
        * Makefile: Change library/dll naming; add targets for
        testing each of the two VC++ EH scheme versions;
        default target now issues help message; compile warnings
        now interpreted as errors to stop the make; add new
        tests; restructure to remove prerequisites needed
        otherwise.
        * README: Updated. | 
|  | * cleanup.c (pthread_pop_cleanup): Remove _pthread
        prefix from __except and catch keywords; implement.h
        now simply undefines _pthread__except and
        _pthread_catch if defined; VC++ was not textually
        substituting _pthread_catch etc back to catch as
        it was redefined; the reason for using the prefixed
        version was to make it clear that it was not using
        the pthread.h redefined catch keyword.
        * private.c (_pthread_threadStart): Ditto.
        (_pthread_callUserDestroyRoutines): Ditto.
        * implement.h (_pthread__except): Remove #define.
        (_pthread_catch): Remove #define.
        * GNUmakefile (pthread.a): New target to build
        libpthread32.a from pthread.dll using dlltool.
        * buildlib.bat: Duplicate cl commands with args to
        build C++ EH version of pthread.dll; use of .bat
        files is redundant now that nmake compatible
        Makefile is included; used as a kludge only now.
        * Makefile: Localise some macros and fix up the clean:
        target to extend it and work properly.
        * CONTRIBUTORS: Add contributors.
        * ANNOUNCE: Updated.
        * README: Updated.
tests/ChangeLog:
2000-08-10  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * eyal1.c (main): Change implicit cast to explicit
        cast when passing "print_server" function pointer;
        G++ no longer allows implicit func parameter casts.
        * cleanup1.c: Remove unused "waitLock".
        (main): Fix implicit parameter cast.
        * cancel2.c (main): Fix implicit parameter cast.
        * cancel4.c (main): Fix implicit parameter cast.
        * cancel3.c (main): Fix implicit parameter cast.
        * GNUmakefile: Renamed from Makefile; Add missing
        cancel1 and cancel2 test targets.
        * Makefile: Converted for use with MS nmake. | 
|  | * pthread.h: Remove #warning - VC++ doesn't accept it.
2000-08-05  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	* pthread.h (PtW32CatchAll): Add macro. When compiling
	applications using VC++ with C++ EH rather than SEH
	'PtW32CatchAll' must be used in place of any 'catch( ... )'
	if the application wants pthread cancelation or
	pthread_exit() to work.
2000-08-03  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	* pthread.h: Add a base class Pthread_exception for
	library internal exceptions and change the "catch"
	re-define macro to use it.
2000-08-02  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	* GNUmakefile (CFLAGS): Add -mthreads.
	Add new targets to generate cpp and asm output.
	* sync.c (pthread_join): Remove dead code.
tests:
2000-08-06  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	* ccl.bat: Add /nologo to remove extraneous output.
	* exception1.c (exceptionedThread): Init 'dummy';
	put expression into if condition to prevent optimising away;
	remove unused variable.
	* cancel4.c (mythread): Cast return value to avoid warnings.
	* cancel2.c (mythread): Missing #endif.
	* condvar9.c (mythread): Cast return value to avoid warnings.
	* condvar8.c (mythread): Cast return value to avoid warnings.
	* condvar7.c (mythread): Cast return value to avoid warnings.
	* cleanup3.c (mythread): Cast return value to avoid warnings.
	* cleanup2.c (mythread): Cast return value to avoid warnings.
	* cleanup1.c (mythread): Cast return value to avoid warnings.
	* condvar5.c (mythread): Cast return value to avoid warnings.
	* condvar3.c (mythread): Cast return value to avoid warnings.
	* condvar6.c (mythread): Cast return value to avoid warnings.
	* condvar4.c (mythread): Cast return value to avoid warnings.
2000-08-05  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	* cancel2.c: Use PtW32CatchAll macro if defined.
	* exception1.c: Use PtW32CatchAll macro if defined.
2000-08-02  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	* tsd1.c: Fix typecasts of &result [g++ is now very fussy].
	* test.h (assert): Return 0's explicitly to allay
	g++ errors.
	* join2.c: Add explicit typecasts.
	* join1.c: Add explicit typecasts.
	* join0.c: Add explicit typecasts.
	* eyal1.c: Add explicit typecasts.
	* count1.c (main): Add type cast to remove g++ parse warning
	[gcc-2.95.2 seems to have tightened up on this].
	* Makefile (GLANG): Use c++ explicitly.
	Remove MSVC sections (was commented out).
	Add target to generate cpp output. | 
|  | * sched.c (sched_get_priority_max): Handle different WinCE and
        Win32 priority values together.
        (sched_get_priority_min): Ditto.
        - Tristan Savatier <tristan@mpegtv.com>
        * create.c (pthread_create): Force new threads to wait until
        pthread_create has the new thread's handle; we also retain
        a local copy of the handle for internal use until
        pthread_create returns.
        * private.c (_pthread_threadStart): Initialise ei[].
        (_pthread_threadStart): When beginthread is used to start the
        thread, force waiting until the creator thread had the
        thread handle.
        * cancel.c (_pthread_cancel_thread): Include context switch
        code for defined(_X86_) environments in addition to _M_IX86.
        * rwlock.c (pthread_rwlock_destroy): Assignment changed
        to avoid compiler warning.
        * private.c (_pthread_get_exception_services_code): Cast
        NULL return value to avoid compiler warning.
        * cleanup.c (pthread_pop_cleanup): Initialise "cleanup" variable
        to avoid compiler warnings.
        * misc.c (_pthread_new): Change "new" variable to "t" to avoid
        confusion with the C++ keyword of the same name.
        * condvar.c (cond_wait_cleanup): Initialise lastWaiter variable.
        (cond_timedwait): Remove unused local variables. to avoid
        compiler warnings.
        * dll.c (dllMain): Remove 2000-07-21 change - problem
        appears to be in pthread_create().
2000-07-22  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * tsd.c (pthread_key_create): If a destructor was given
        and the pthread_mutex_init failed, then would try to
        reference a NULL pointer (*key); eliminate this section of
        code by using a dynamically initialised mutex
        (PTHREAD_MUTEX_INITIALIZER).
        * tsd.c (pthread_setspecific): Return an error if
        unable to set the value; simplify cryptic conditional.
        * tsd.c (pthread_key_delete): Locking threadsLock relied
        on mutex_lock returning an error if the key has no destructor.
        ThreadsLock is only initialised if the key has a destructor.
        Making this mutex a static could reduce the number of mutexes
        used by an application since it is actually created only at
        first use and it's often destroyed soon after.
2000-07-22  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * FAQ: Added Q5 and Q6.
tests/ChangeLog:
2000-07-25  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * runtest.bat: modified to work under W98.
        * runall.bat: Add new tests; modified to work under W98.
        It was ok under NT.
        * Makefile: Add new tests.
        * exception1.c: New; Test passing exceptions back to the
        application and retaining library internal exceptions.
        * join0.c: New; Test a single join. | 
|  | * dll.c (dllMain): Remove 2000-07-21 change - problem
        appears to be in pthread_create().
2000-07-21  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
        * create.c (pthread_create): Set threadH to 0 (zero)
        everywhere. Some assignments were using NULL. Maybe
        it should be NULL everywhere - need to check. (I know
        they are nearly always the same thing - but not by
        definition.)
        * dll.c: Include resource leakage work-around. This is a
        partial FIXME which doesn't stop all leakage. The real
        problem needs to be found and fixed.
        - "David Baggett" <dmb@itasoftware.com>
        * misc.c (pthread_self): Try to catch NULL thread handles
        at the point where they might be generated, even though
        they should always be valid at this point.
        * tsd.c (pthread_setspecific): return an error value if
        pthread_self() returns NULL.
        * sync.c (pthread_join): return an error value if
        pthread_self() returns NULL.
        * signal.c (pthread_sigmask): return an error value if
        pthread_self() returns NULL. | 
|  | * Makefile: Remove inconsistencies in 'cl' args
        - Erik Hensema <erik.hensema@group2000.nl> | 
|  | - asynchronous cancellation added
	- attempt to hide internal exceptions from applications
	- kernel32 load/free problem fixed
	- new tests
	- changes only to comments in some tests | 
|  | (ETIMEDOUT): Change fallback value to that defined by winsock.h. | 
|  | * general: Patched for portability to WinCE. The details are
        described in the file WinCE-PORT. Follow the instructions
        in README.WinCE to make the appropriate changes in config.h.
        - Tristan Savatier <tristan@mpegtv.com> | 
|  | 1999-10-30  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * create.c (pthread_create): Explicitly initialise thread state to
        default values.
        * cancel.c (pthread_setcancelstate): Check for NULL 'oldstate'
        for compatibility with Solaris pthreads;
        (pthread_setcanceltype): ditto:
        - Erik Hensema <erik.hensema@group2000.nl>
1999-10-23  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * pthread.h (ctime_r): Fix incorrect argument "_tm"
        - Erik Hensema <erik.hensema@group2000.nl>
tests/ChangeLog:
1999-10-30  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * cancel1.c: New. Test pthread_setcancelstate and
	pthread_setcanceltype functions.
        * eyal1.c (waste_time): Change calculation to avoid FP exception
	on Aplhas
	- Rich Peters <rpeters@micro-magic.com> | 
|  | * pthread.h (_POSIX_THREADS): Only define it if it isn't
        already defined. Projects may need to define this on
        the CC command line under Win32 as it doesn't have unistd.h
        - Aurelio Medina <aureliom@crt.com> | 
|  | * rwlock.c (pthread_rwlock_destroy): Add cast to remove compile
        warning.
        * condvar.c (pthread_cond_broadcast): Only release semaphores
        if there are waiting threads.
1999-10-15  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * condvar.c (cond_wait_cleanup): New static cleanup handler for
        cond_timedwait;
        (cond_timedwait): pthread_cleanup_push args changed;
        canceling a thread while it's in pthread_cond_wait
        will now decrement the waiters count and cleanup if it's the
        last waiter.
        - Lorin Hochstein <lmh@xiphos.ca> and
          Peter Slacik <Peter.Slacik@tatramed.sk>;
        the last waiter will now reset the CV's wasBroadcast flag
        - Graham Dumpleton <Graham.Dumpleton@ra.pad.otc.telstra.com.au>. | 
|  | * rwlock.c (pthread_rwlock_destroy): Add serialisation.
	(_rwlock_check_need_init): Check for detroyed rwlock.
	* rwlock.c: Check return codes from _rwlock_check_need_init();
	modify comments; serialise access to rwlock objects during
	operations; rename rw_mutex to rw_lock.
	* implement.h: Rename rw_mutex to rw_lock.
        * mutex.c (pthread_mutex_destroy): Add serialisation.
        (_mutex_check_need_init): Check for detroyed mutex.
        * condvar.c (pthread_cond_destroy): Add serialisation.
        (_cond_check_need_init): Check for detroyed condvar.
        * mutex.c: Modify comments.
	* condvar.c: Modify comments. | 
|  | The following code for POSIX read/write locks was contributed
        by Aurelio Medina.
        * implement.h (pthread_rwlock_t_): Add.
        * pthread.h (pthread_rwlock_t): Add.
        (PTHREAD_RWLOCK_INITIALIZER): Add.
        Add rwlock function prototypes.
        * rwlock.c: New module.
        * pthread.def: Add new rwlock functions.
        * private.c (_pthread_processInitialize): initialise
        _pthread_rwlock_test_init_lock critical section.
        * global.c (_pthread_rwlock_test_init_lock): Add.
        * mutex.c (pthread_mutex_destroy): Don't free mutex memory
        if mutex is PTHREAD_MUTEX_INITIALIZER and has not been
        initialised yet.
tests/ChangeLog
Sep 15 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * rwlock1.c: New test.
        * rwlock2.c: New test.
        * rwlock3.c: New test.
        * rwlock4.c: New test. | 
|  | * mutex.c (pthread_mutex_destroy): Don't free mutex memory
        if mutex is PTHREAD_MUTEX_INITIALIZER and has not been
        initialised yet. | 
|  | * 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. |