| Age | Commit message (Collapse) | Author | 
|---|
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | tests/benchmarks. | 
|  |  | 
|  |  | 
|  | with a recursive mutex that was locked by the current thread, the
function was failing with a success return code. | 
|  | exit. | 
|  |  | 
|  |  | 
|  |  | 
|  | a non-cancelable sem_wait() function. This is consistent with the
        way that pthread_mutex_timedlock.c does it.
        (pthread_mutex_lock): Use ptw32_semwait() instead of sem_wait(). | 
|  | * pthread_mutex_trylock.c: Should return EBUSY rather than EDEADLK.
        * pthread_mutex_destroy.c: Remove redundant ownership test (the
        trylock call does this for us); do not destroy a recursively locked
        mutex. | 
|  | * pthread_cond_destroy.c (pthread_cond_destroy):
        When two different threads exist, and one is attempting to
        destroy a condition variable while the other is attempting to
        initialize a condition variable that was created with
        PTHREAD_COND_INITIALIZER, a deadlock can occur. Shrink
        the ptw32_cond_list_lock critical section to fix it. | 
|  |  | 
|  | Remove code designed to avoid/prevent spurious wakeup
  problems. It is believed that the sem_timedwait() call
  is consuming a CV signal that it shouldn't and this is
  breaking the avoidance logic. | 
|  | unreasonable abstime values - that would result in
  unexpected timeout values.
* w32_CancelableWait.c (ptw32_cancelable_wait):
  Tighten up return value checking and add comments. | 
|  |  | 
|  |  | 
|  | * pthread.h: Conditionally added some #defines from config.h
        needed when not building the library. e.g. NEED_ERRNO, NEED_SEM.
        (PTW32_DLLPORT): Now only defined if _DLL defined.
        (_errno): Compiler directive was incorrectly including prototype.
        * sched.h: Conditionally added some #defines from config.h
        needed when not building the library.
        * semaphore.h: Replace an instance of NEED_SEM that should
        have been NEED_ERRNO. This change currently has nil effect.
        * GNUmakefile: Correct some recent changes.
        * Makefile: Add rule to generate pre-processor output. | 
|  | exit() rather than pthread_exit(). Add comments to explain
        why.
        * rwlock2_t.c: New test.
        * rwlock3_t.c: New test.
        * rwlock4_t.c: New test.
        * rwlock5_t.c: New test.
        * rwlock6_t.c: New test.
        * rwlock6_t2.c: New test.
        * rwlock6.c (main): Swap thread and result variables
        to correspond to actual thread functions.
        * rwlock1.c: Change test description comment to correspond
        to the actual test. | 
|  |  | 
|  | critical section to solve deadlock problem.
        * pthread.c: Add all remaining C modules.
        * pthread.h: Use dllexport/dllimport attributes on functions
        to avoid using pthread.def.
        * sched.h: Likewise.
        * semaphore.h: Likewise.
        * GNUmakefile: Add new targets for single translation
        unit build to maximise inlining potential; generate
        pthread.def automatically.
        * Makefile: Likewise, but no longer uses pthread.def. | 
|  |  | 
|  |  | 
|  |  | 
|  | conditional compilation; refinements; bug fixes. See the ChangeLog. | 
|  | cancelation point. Deferred cancels will interrupt the
        wait. | 
|  | 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. | 
|  | for systems that define NEED_SEM (e.g. early WinCE).
        * mutex.c (pthread_mutex_timedlock): Return ENOTSUP
        for systems that define NEED_SEM since they don't
        have sem_trywait(). | 
|  | * 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. | 
|  | ptw32_interlocked_compare_exchange function pointer
        rather than ptw32_InterlockedCompareExchange() directly
        to retain portability to non-iX86 processors,
        e.g. WinCE etc. The pointer will point to the native
        OS version of InterlockedCompareExchange() if the
        OS supports it (see ChangeLog entry of 2001-10-17). | 
|  | section calls.
	(pthread_mutex_destroy): Likewise.
	(pthread_mutex_unlock): Likewise.
	(pthread_mutex_trylock): Likewise; recursive mutexes
	now increment the lock count rather than return EBUSY;
	errorcheck mutexes return EDEADLCK rather than
	EBUSY. This behaviour is consistent with the Solaris
	pthreads implementation.
	* implement.h (pthread_mutex_t_): Remove critical
	section element - no longer needed. | 
|  | checking and actually store the scope value even
        though it's not really necessary.
        (pthread_attr_getscope): Return stored value.
        * implement.h (pthread_attr_t_): Add new scope element.
        * ANNOUNCE: Fix out of date comment next to
        pthread_attr_setscope in conformance section. | 
|  | not thread-safe.
	(pthread_mutex_trylock): Likewise. | 
|  | the calloc NULL check was left in the conditionally included section.
(sem_destroy): Likewise, the calloced sem_t wasn't being freed. | 
|  | in conditionally compiled code. Only older versions of
        WinCE require this code, hence it doesn't normally get
        tested. | 
|  | WSAGetLastError() and WSASetLastError().
        * Makefile (wsock32.lib): Likewise.
        * create.c: Minor mostly inert changes.
        * implement.h (PTW32_MAX): Move into here and renamed
        from sched.h.
        (PTW32_MIN): Likewise.
        * GNUmakefile (TEST_ICE): Define if testing internal
        implementation of InterlockedCompareExchange.
        * Makefile (TEST_ICE): Likewise.
        * private.c (TEST_ICE): Likewise. | 
|  | 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. | 
|  | from LCC by conditionally compiling the stacksize
        validity check. LCC correctly warns that the condition
        (stacksize < PTHREAD_STACK_MIN) is suspicious
        because STACK_MIN is 0 and stacksize is of type
        size_t (or unsigned int). | 
|  | was causing a program fault.
        (pthread_spin_init): Could have alloced memory
        without freeing under some error conditions.
        * mutex.c (pthread_mutex_init): Move memory
        allocation of mutex struct after checking for
        PROCESS_SHARED. |