Age | Commit message (Collapse) | Author |
|
instead of a pthread_mutex_t.
|
|
more atomic and cancel-safe.
|
|
* nonportable.c (pthread_mutex_setdefaulttype_np): New
function for changing the default mutex type.
* mutex.c (ptw32_InitializeCriticalSection): Removed.
(ptw32_InitializeCriticalSection): Removed.
(ptw32_InitializeCriticalSection): Removed.
(ptw32_InitializeCriticalSection): Removed.
(ptw32_InitializeCriticalSection): Removed.
(pthread_mutex_init): Apply Thomas Pfaff's original
patches; remove use of critical sections and adapt
for different mutex types (see log entry for 2001-01-10).
The disadvantage of using critical sections is that
they don't appear to be sharable between processes.
This implementation provides the opportunity to place
mutex objects in shared memory. Thread priority
determines the order in which waiting threads acquire
the mutex although the implementation includes a
mechanism to prevent threads hogging the mutex through
successive unlock/lock operations.
(pthread_mutex_destroy): Likewise.
(pthread_mutex_lock): Likewise.
(pthread_mutex_unlock): Likewise.
(pthread_mutex_trylock): Likewise.
* pthread.h (rand_r): Add redundant test of '_seed' arg
to avoid "unused variable" warnings. Any good compiler
will optimise the test away anyway.
|
|
|
|
|
|
|
|
|
|
See ChangeLog.
|
|
the following types of mutex:
PTHREAD_MUTEX_DEFAULT
PTHREAD_MUTEX_NORMAL
PTHREAD_MUTEX_ERRORCHECK
PTHREAD_MUTEX_RECURSIVE
(pthread_mutex_lock): Process the lock request
according to the mutex type.
* mutex.c: No longer use Win32 mutexes as the
basis of POSIX mutexes when TryEnterCriticalSection
isn't supported; implement our own versions of
ptw32_{Initialize,Delete,TryEnter,Enter,Leave}CriticalSection
functions to emulate TryEnterCriticalSection when
it isn't supported by the system; don't allow recursive
mutex locks (similar to PTHREAD_MUTEX_ERRORCHECK
on other systems).
- Thomas Pfaff <tpfaff@gmx.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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>
|
|
but it still has known bugs.
|
|
|
|
* 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.
|
|
|
|
* create2.c: New; Test that pthread_t contains
the W32 HANDLE before it calls the thread routine
proper.
|
|
* 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.
|
|
or snapshot.
|
|
|
|
|
|
* 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.
|
|
|
|
|
|
|