📄 changelog
字号:
* sem_close.c: Separated routine from semaphore.c.
* ptw32_decrease_semaphore.c: Likewise.
* sem_destroy.c: Likewise.
* sem_getvalue.c: Likewise.
* ptw32_increase_semaphore.c: Likewise.
* sem_init.c: Likewise.
* sem_open.c: Likewise.
* sem_post.c: Likewise.
* sem_post_multiple.c: Likewise.
* sem_timedwait.c: Likewise.
* sem_trywait.c: Likewise.
* sem_unlink.c: Likewise.
* sem_wait.c: Likewise.
2002-02-04 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
The following extends the idea above to the rest of pthreads-win32 - rpj
* attr.c: All routines are now in separate compilation units;
This file is used to congregate the separate modules for
potential inline optimisation and backward build compatibility.
* pthread_attr_destroy.c: Separated routine from attr.c.
* pthread_attr_getdetachstate.c: Likewise.
* pthread_attr_getscope.c: Likewise.
* pthread_attr_getstackaddr.c: Likewise.
* pthread_attr_getstacksize.c: Likewise.
* pthread_attr_init.c: Likewise.
* pthread_attr_is_attr.c: Likewise.
* pthread_attr_setdetachstate.c: Likewise.
* pthread_attr_setscope.c: Likewise.
* pthread_attr_setstackaddr.c: Likewise.
* pthread_attr_setstacksize.c: Likewise.
* pthread.c: Agregation of agregate modules for super-inlineability.
2002-02-02 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* cancel.c: Rearranged some code and introduced checks
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.
2002-02-01 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* semaphore.c (sem_trywait): Fix missing errno return
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().
2002-01-27 Ross Johnson <rpj at special.ise.canberra.edu.au>
* 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 at 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 at 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.
2002-01-14 Ross Johnson <rpj at special.ise.canberra.edu.au>
* attr.c (pthread_attr_setscope): Fix struct pointer
indirection error introduced 2002-01-04.
(pthread_attr_getscope): Likewise.
2002-01-12 Ross Johnson <rpj at special.ise.canberra.edu.au>
* pthread.dsp (SOURCE): Add missing source files.
2002-01-08 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* mutex.c (pthread_mutex_trylock): use
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).
2002-01-07 Thomas Pfaff <tpfaff at gmx.net>, Alexander Terekhov <TEREKHOV at de.ibm.com>
* mutex.c (pthread_mutex_init): Remove critical
section calls.
(pthread_mutex_destroy): Likewise.
(pthread_mutex_unlock): Likewise.
(pthread_mutex_trylock): Likewise; uses
ptw32_InterlockedCompareExchange() to avoid need for
critical section; library is no longer i386 compatible;
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.
2002-01-04 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* attr.c (pthread_attr_setscope): Add more error
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.
2001-12-21 Alexander Terekhov <TEREKHOV at de.ibm.com>
* mutex.c (pthread_mutex_lock): Decrementing lock_idx was
not thread-safe.
(pthread_mutex_trylock): Likewise.
2001-10-26 prionx@juno.com
* semaphore.c (sem_init): Fix typo and missing bracket
in conditionally compiled code. Only older versions of
WinCE require this code, hence it doesn't normally get
tested; somehow when sem_t reverted to an opaque struct
the calloc NULL check was left in the conditionally included
section.
(sem_destroy): Likewise, the calloced sem_t wasn't being freed.
2001-10-25 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* GNUmakefile (libwsock32): Add to linker flags for
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.
2001-10-24 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* attr.c (pthread_attr_setstacksize): Quell warning
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).
2001-10-17 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* barrier.c: Move _LONG and _LPLONG defines into
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.
2001-10-15 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* spin.c (pthread_spin_lock): PTHREAD_SPINLOCK_INITIALIZER
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.
2001-10-12 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* spin.c (pthread_spin_unlock): Was not returning
EPERM if the spinlock was not locked, for multi CPU
machines.
2001-10-08 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* spin.c (pthread_spin_trylock): Was not returning
EBUSY for multi CPU machines.
2001-08-24 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* condvar.c (pthread_cond_destroy): Remove cv element
that is no longer used.
* implement.h: Likewise.
2001-08-23 Alexander Terekhov <TEREKHOV at de.ibm.com>
* condvar.c (pthread_cond_destroy): fix bug with
respect to deadlock in the case of concurrent
_destroy/_unblock; a condition variable can be destroyed
immediately after all the threads that are blocked on
it are awakened.
2001-08-23 Phil Frisbie, Jr. <phil at hawksoft.com>
* tsd.c (pthread_getspecific): Preserve the last
winsock error [from WSAGetLastError()].
2001-07-18 Scott McCaskill <scott at magruder.org>
* mutex.c (pthread_mutexattr_init): Return ENOMEM
immediately and don't dereference the NULL pointer
if calloc fails.
(pthread_mutexattr_getpshared): Don't dereference
a pointer that is possibly NULL.
* barrier.c (pthread_barrierattr_init): Likewise
(pthread_barrierattr_getpshared): Don't dereference
a pointer that is possibly NULL.
* condvar.c (pthread_condattr_getpshared): Don't dereference
a pointer that is possibly NULL.
2001-07-15 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* rwlock.c (pthread_rwlock_wrlock): Is allowed to be
a cancelation point; re-enable deferred cancelability
around the CV call.
2001-07-10 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* barrier.c: Still more revamping. The exclusive access
mutex isn't really needed so it has been removed and replaced
by an InterlockedDecrement(). nSerial has been removed.
iStep is now dual-purpose. The process shared attribute
is now stored in the barrier struct.
* implement.h (pthread_barrier_t_): Lost some/gained one
elements.
* private.c (ptw32_threadStart): Removed some comments.
2001-07-10 Ross Johnson <rpj at setup1.ise.canberra.edu.au>
* barrier
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -