Age | Commit message (Collapse) | Author |
|
to disable cancelation at the start of a thread's cancelation
run to prevent double cancelation. The main problem
arises if a thread is canceling and then receives a subsequent
async cancel request.
* private.c: Likewise.
* condvar.c: Place pragmas around cleanup_push/pop to turn
off inline optimisation (/Obn where n>0 - MSVC only). Various
optimisation switches in MSVC turn this on, which interferes with
the way that cleanup handlers are run in C++ EH and SEH
code. Application code compiled with inline optimisation must
also wrap cleanup_push/pop blocks with the pragmas, e.g.
#pragma inline_depth(0)
pthread_cleanup_push(...)
...
pthread_cleanup_pop(...)
#pragma inline_depth(8)
* rwlock.c: Likewise.
* mutex.c: Remove attempts to inline some functions.
* signal.c: Modify misleading comment.
tests/
* mutex8: New test.
* mutex8n: New test.
* mutex8e: New test.
* mutex8r: New test.
* cancel6a: New test.
* cancel6d: New test.
* cleanup0.c: Add pragmas for inline optimisation control.
* cleanup1.c: Add pragmas for inline optimisation control.
* cleanup2.c: Add pragmas for inline optimisation control.
* cleanup3.c: Add pragmas for inline optimisation control.
* condvar7.c: Add pragmas for inline optimisation control.
* condvar8.c: Add pragmas for inline optimisation control.
* condvar9.c: Add pragmas for inline optimisation control.
|
|
* mutex.c (pthread_mutex_timedlock): New function suggested by
Alexander Terekhov. The logic required to implement this
properly came from Alexander, with some collaboration
with Thomas Pfaff.
(pthread_mutex_unlock): Wrap the waiters check and sema
post in a critical section to prevent a race with
pthread_mutex_timedlock.
(ptw32_timed_semwait): New function;
returns a special result if the absolute timeout parameter
represents a time already passed when called; used by
pthread_mutex_timedwait(). Have deliberately not reused
the name "ptw32_sem_timedwait" because they are not the same
routine.
* condvar.c (ptw32_cond_timedwait): Use the new sem_timedwait()
instead of ptw32_sem_timedwait(), which now has a different
function. See previous.
* implement.h: Remove prototype for ptw32_sem_timedwait.
See next.
(pthread_mutex_t_): Add critical section element for access
to lock_idx during mutex post-timeout processing.
* semaphore.h (sem_timedwait): See next.
* semaphore.c (sem_timedwait): See next.
* private.c (ptw32_sem_timedwait): Move to semaphore.c
and rename as sem_timedwait().
2002-01-18 Ross Johnson <rpj@special.ise.canberra.edu.au>
* sync.c (pthread_join): Was getting the exit code from the
calling thread rather than the joined thread if
defined(__MINGW32__) && !defined(__MSVCRT__).
2002-01-15 Ross Johnson <rpj@special.ise.canberra.edu.au>
* pthread.h: Unless the build explicitly defines __CLEANUP_SEH,
__CLEANUP_CXX, or __CLEANUP_C, then the build defaults to
__CLEANUP_C style cleanup. This style uses setjmp/longjmp
in the cancelation and thread exit implementations and therefore
won't do stack unwinding if linked to applications that have it
(e.g. C++ apps). This is currently consistent with most/all
commercial Unix POSIX threads implementations.
* spin.c (pthread_spin_init): Edit renamed function call.
* nonportable.c (pthread_num_processors_np): New.
(pthread_getprocessors_np): Renamed to ptw32_getprocessors
and moved to private.c.
* private.c (pthread_getprocessors): Moved here from
nonportable.c.
* pthread.def (pthread_getprocessors_np): Removed
from export list.
* rwlock.c (pthread_rwlockattr_init): New.
(pthread_rwlockattr_destroy): New.
(pthread_rwlockattr_getpshared): New.
(pthread_rwlockattr_setpshared): New.
|
|
indirection error introduced 2002-01-04.
(pthread_attr_getscope): Likewise.
* pthread.dsp (SOURCE): Add missing source files.
./tests/:
* exception3.c (main): Shorten wait time.
* mutex7.c: New test.
* mutex7n.c: New test.
* mutex7e.c: New test.
* mutex7r.c: New test.
* mutex6.c: Modified to avoid leaving the locked mutex
around on exit.
|
|
implement.h; rename to PTW32_INTERLOCKED_LONG and
PTW32_INTERLOCKED_LPLONG respectively.
* spin.c: Likewise; ptw32_interlocked_compare_exchange used
in place of InterlockedCompareExchange directly.
* global.c (ptw32_interlocked_compare_exchange): Add
prototype for this new routine pointer to be used when
InterlockedCompareExchange isn't supported by Windows.
* nonportable.c (pthread_win32_process_attach_np): Check for
support of InterlockedCompareExchange in kernel32 and assign its
address to ptw32_interlocked_compare_exchange if it exists, or
our own ix86 specific implementation ptw32_InterlockedCompareExchange.
*private.c (ptw32_InterlockedCompareExchange): An
implementation of InterlockedCompareExchange() which is
specific to ix86; written directly in assembler for either
MSVC or GNU C; needed because Windows 95 doesn't support
InterlockedCompareExchange().
* sched.c (sched_get_priority_min): Extend to return
THREAD_PRIORITY_IDLE.
(sched_get_priority_max): Extend to return
THREAD_PRIORITY_CRITICAL.
|
|
* barrier.c: Fix several bugs in all routines. Now passes
tests/barrier5.c which is fairly rigorous. There is still
a non-optimal work-around for a race condition between
the barrier breeched event signal and event wait. Basically
the last (signalling) thread to hit the barrier yields
to allow any other threads, which may have lost the race,
to complete.
tests/ChangeLog:
* barrier3.c: Fixed.
* barrier4.c: Fixed.
* barrier5.c: New; proves that all threads in the group
reaching the barrier wait and then resume together. Repeats
the test using groups of 1 to 16 threads. Each group of
threads must negotiate a large number of barriers (10000).
* spin4.c: Fixed.
* test.h (error_string): Modified the success (0) value.
|
|
for this object.
* pthread.h (PTHREAD_BARRIER_INITIALIZER): Removed.
* rwlock.c (pthread_rwlock_wrlock): This routine is
not a cancelation point - disable deferred
cancelation around call to pthread_cond_wait().
tests/ChangeLog:
* spin1.c: New; testing spinlocks.
* spin2.c: New; testing spinlocks.
* spin3.c: New; testing spinlocks.
* spin4.c: New; testing spinlocks.
* barrier1.c: New; testing barriers.
* barrier2.c: New; testing barriers.
* barrier3.c: New; testing barriers.
* barrier4.c: New; testing barriers.
* GNUmakefile: Add new tests.
* Makefile: Add new tests.
|
|
|
|
Contributed by - Alexander Terekhov.
* condvar.c: Fixed lost signal bug reported by Timur Aydin
(taydin@snet.net).
[RPJ (me) didn't translate the original algorithm
correctly.]
* semaphore.c: Added sem_post_multiple; this is a useful
routine, but it doesn't appear to be standard. For now it's
not an exported function.
tests/ChangeLog:
2001-07-01 Ross Johnson <rpj@special.ise.canberra.edu.au>
* benchtest3.c: New; timing mutexes.
* benchtest4.c: New; time mutexes.
* condvar3_1.c: Fixed bug - Alexander Terekhov
* condvar3_3.c: New test.
2001-06-25 Ross Johnson <rpj@special.ise.canberra.edu.au>
* priority1.c: New test.
* priority2.c: New test.
* inherit1.c: New test.
* benchtest1.c: New; timing mutexes.
* benchtest2.c: New; timing mutexes.
* mutex4.c: Modified to test all mutex types.
|
|
* create.c (pthread_create): Add priority inheritance
attributes.
* mutex.c (pthread_mutex_lock): Remove some overhead for
PTHREAD_MUTEX_NORMAL mutex types. Specifically, avoid
calling pthread_self() and pthread_equal() to check/set
the mutex owner. Introduce a new pseudo owner for this
type. Test results suggest increases in speed of up to
90% for non-blocking locks.
This is the default type of mutex used internally by other
synchronising objects, ie. condition variables and
read-write locks. The test rwlock7.c shows about a
30-35% speed increase over snapshot 2001-06-06. The
price of this is that the application developer
must ensure correct behaviour, or explicitly set the
mutex to a safer type such as PTHREAD_MUTEX_ERRORCHECK.
For example, PTHREAD_MUTEX_NORMAL (or PTHREAD_MUTEX_DEFAULT)
type mutexes will not return an error if a thread which is not
the owner calls pthread_mutex_unlock. The call will succeed
in unlocking the mutex if it is currently locked, but a
subsequent unlock by the true owner will then fail with EPERM.
This is however consistent with some other implementations.
(pthread_mutex_unlock): Likewise.
(pthread_mutex_trylock): Likewise.
(pthread_mutex_destroy): Likewise.
* attr.c (pthread_attr_init): PTHREAD_EXPLICIT_SCHED is the
default inheritance attribute; THREAD_PRIORITY_NORMAL is
the default priority for new threads.
* sched.c (pthread_attr_setschedpolicy): Added routine.
(pthread_attr_getschedpolicy): Added routine.
(pthread_attr_setinheritsched): Added routine.
(pthread_attr_getinheritsched): Added routine.
* pthread.h (sched_rr_set_interval): Added as a macro;
returns -1 with errno set to ENOSYS.
2001-06-23 Ross Johnson <rpj@setup1.ise.canberra.edu.au>
*sched.c (pthread_attr_setschedparam): Add priority range
check.
(sched_setscheduler): New function; checks for a valid
pid and policy; checks for permission to set information
in the target process; expects pid to be a Win32 process ID,
not a process handle; the only scheduler policy allowed is
SCHED_OTHER.
(sched_getscheduler): Likewise, but checks for permission
to query.
* pthread.h (SCHED_*): Moved to sched.h as defined in the
POSIX standard.
* sched.h (SCHED_*): Moved from pthread.h.
(pid_t): Defined if necessary.
(sched_setscheduler): Defined.
(sched_getscheduler): Defined.
* pthread.def (sched_setscheduler): Exported.
(sched_getscheduler): Likewise.
2001-06-23 Ross Johnson <rpj@setup1.ise.canberra.edu.au>
Contributed by - Ralf Brese <Ralf.Brese@pdb4.siemens.de>
* create.c (pthread_create): Set thread priority from
thread attributes.
|
|
2001-06-03 Ross Johnson <rpj@setup1.ise.canberra.edu.au>
Contributed by - Alexander Terekhov <TEREKHOV@de.ibm.com>
- Louis Thomas <lthomas@arbitrade.com>
* condvar.c (pthread_cond_init): Completely revamped.
(pthread_cond_destroy): Likewise.
(ptw32_cond_wait_cleanup): Likewise.
(ptw32_cond_timedwait): Likewise.
(ptw32_cond_unblock): New general signaling routine.
(pthread_cond_signal): Now calls ptw32_cond_unblock.
(pthread_cond_broadcast): Likewise.
* implement.h (pthread_cond_t_): Revamped.
* README.CV: New; explanation of the above changes.
pthreads/tests:
2001-06-3 Ross Johnson <rpj@special.ise.canberra.edu.au>
* condvar2_1.c: New test.
* condvar3_1.c: New test.
* condvar3_2.c: New test.
|
|
* 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.
|
|
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.
|
|
* 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.
|
|
* 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.
|
|
|
|
- asynchronous cancellation added
- attempt to hide internal exceptions from applications
- kernel32 load/free problem fixed
- new tests
- changes only to comments in some tests
|
|
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>
|
|
* 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>.
|
|
|
|
|
|
* 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.
|
|
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.
|
|
|
|
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().
|
|
* 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.
|
|
* 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.
|
|
|
|
* 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.
|
|
* Makefile (condvar3, condvar4): Add tests.
|
|
* Template.c: Revamp.
* condvar1.c: Add.
* condvar2.c: Add.
* Makefile: Add condvar1 condvar2 tests.
* exit1.c, exit2.c, exit3.c: Cosmetic changes.
|
|
* Makefile: Some refinement.
* *.c: More exhaustive checking through assertions; clean up;
add some more tests.
|
|
* 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.
|
|
* 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.
|