| RELEASE 2.8.0 |
| ------------- |
| (2006-12-22) |
| |
| General |
| ------- |
| New bug fixes in this release since 2.7.0 have not been applied to the |
| version 1.x.x series. It is probably time to drop version 1. |
| |
| Testing and verification |
| ------------------------ |
| This release has not yet been tested on SMP architechtures. All tests pass |
| on a uni-processor system. |
| |
| Bug fixes |
| --------- |
| Sem_destroy could return EBUSY even though no threads were waiting on the |
| semaphore. Other races around invalidating semaphore structs (internally) |
| have been removed as well. |
| |
| New tests |
| --------- |
| semaphore5.c - tests the bug fix referred to above. |
| |
| |
| RELEASE 2.7.0 |
| ------------- |
| (2005-06-04) |
| |
| General |
| ------- |
| All new features in this release have been back-ported in release 1.11.0, |
| including the incorporation of MCS locks in pthread_once, however, versions |
| 1 and 2 remain incompatible even though they are now identical in |
| performance and functionality. |
| |
| Testing and verification |
| ------------------------ |
| This release has been tested (passed the test suite) on both uni-processor |
| and multi-processor systems. |
| - Tim Theisen |
| |
| Bug fixes |
| --------- |
| Pthread_once has been re-implemented to remove priority boosting and other |
| complexity to improve robustness. Races for Win32 handles that are not |
| recycle-unique have been removed. The general form of pthread_once is now |
| the same as that suggested earlier by Alexander Terekhov, but instead of the |
| 'named mutex', a queue-based lock has been implemented which has the required |
| properties of dynamic self initialisation and destruction. This lock is also |
| efficient. The ABI is unaffected in as much as the size of pthread_once_t has |
| not changed and PTHREAD_ONCE_INIT has not changed, however, applications that |
| peek inside pthread_once_t, which is supposed to be opaque, will break. |
| - Vladimir Kliatchko |
| |
| New features |
| ------------ |
| * Support for Mingw cross development tools added to GNUmakefile. |
| Mingw cross tools allow building the libraries on Linux. |
| - Mikael Magnusson |
| |
| |
| RELEASE 2.6.0 |
| ------------- |
| (2005-05-19) |
| |
| General |
| ------- |
| All of the bug fixes and new features in this release have been |
| back-ported in release 1.10.0. |
| |
| Testing and verification |
| ------------------------ |
| This release has been tested (passed the test suite) on both uni-processor |
| and multi-processor systems. Thanks to Tim Theisen at TomoTherapy for |
| exhaustively running the MP tests and for providing crutial observations |
| and data when faults are detected. |
| |
| Bugs fixed |
| ---------- |
| |
| * pthread_detach() now reclaims remaining thread resources if called after |
| the target thread has terminated. Previously, this routine did nothing in |
| this case. |
| |
| New tests |
| --------- |
| |
| * detach1.c - tests that pthread_detach properly invalidates the target |
| thread, which indicates that the thread resources have been reclaimed. |
| |
| |
| RELEASE 2.5.0 |
| ------------- |
| (2005-05-09) |
| |
| General |
| ------- |
| |
| The package now includes a reference documentation set consisting of |
| HTML formatted Unix-style manual pages that have been edited for |
| consistency with Pthreads-w32. The set can also be read online at: |
| http://sources.redhat.com/pthreads-win32/manual/index.html |
| |
| Thanks again to Tim Theisen for running the test suite pre-release |
| on an MP system. |
| |
| All of the bug fixes and new features in this release have been |
| back-ported in release 1.9.0. |
| |
| Bugs fixed |
| ---------- |
| |
| * Thread Specific Data (TSD) key management has been ammended to |
| eliminate a source of (what was effectively) resource leakage (a HANDLE |
| plus memory for each key destruct routine/thread association). This was |
| not a true leak because these resources were eventually reclaimed when |
| pthread_key_delete was run AND each thread referencing the key had exited. |
| The problem was that these two conditions are often not met until very |
| late, and often not until the process is about to exit. |
| |
| The ammended implementation avoids the need for the problematic HANDLE |
| and reclaims the memory as soon as either the key is deleted OR the |
| thread exits, whichever is first. |
| |
| Thanks to Richard Hughes at Aculab for identifying and locating the leak. |
| |
| * TSD key destructors are now processed up to PTHREAD_DESTRUCTOR_ITERATIONS |
| times instead of just once. PTHREAD_DESTRUCTOR_ITERATIONS has been |
| defined in pthread.h for some time but not used. |
| |
| * Fix a semaphore accounting race between sem_post/sem_post_multiple |
| and sem_wait cancellation. This is the same issue as with |
| sem_timedwait that was fixed in the last release. |
| |
| * sem_init, sem_post, and sem_post_multiple now check that the |
| semaphore count never exceeds _POSIX_SEM_VALUE_MAX. |
| |
| * Although sigwait() is nothing more than a no-op, it should at least |
| be a cancellation point to be consistent with the standard. |
| |
| New tests |
| --------- |
| |
| * stress1.c - attempts to expose problems in condition variable |
| and semaphore timed wait logic. This test was inspired by Stephan |
| Mueller's sample test code used to identify the sem_timedwait bug |
| from the last release. It's not a part of the regular test suite |
| because it can take awhile to run. To run it: |
| nmake clean VC-stress |
| |
| * tsd2.c - tests that key destructors are re-run if the tsd key value is |
| not NULL after the destructor routine has run. Also tests that |
| pthread_setspecific() and pthread_getspecific() are callable from |
| destructors. |
| |
| |
| RELEASE 2.4.0 |
| ------------- |
| (2005-04-26) |
| |
| General |
| ------- |
| |
| There is now no plan to release a version 3.0.0 to fix problems in |
| pthread_once(). Other possible implementations of pthread_once |
| will still be investigated for a possible future release in an attempt |
| to reduce the current implementation's complexity. |
| |
| All of the bug fixes and new features in this release have been |
| back-ported for release 1.8.0. |
| |
| Bugs fixed |
| ---------- |
| |
| * Fixed pthread_once race (failures on an MP system). Thanks to |
| Tim Theisen for running exhaustive pre-release testing on his MP system |
| using a range of compilers: |
| VC++ 6 |
| VC++ 7.1 |
| Intel C++ version 8.0 |
| All tests passed. |
| Some minor speed improvements were also done. |
| |
| * Fix integer overrun error in pthread_mutex_timedlock() - missed when |
| sem_timedwait() was fixed in release 2.2.0. This routine no longer returns |
| ENOTSUP when NEED_SEM is defined - it is supported (NEED_SEM is only |
| required for WinCE versions prior to 3.0). |
| |
| * Fix timeout bug in sem_timedwait(). |
| - Thanks to Stephan Mueller for reporting, providing diagnostic output |
| and test code. |
| |
| * Fix several problems in the NEED_SEM conditionally included code. |
| NEED_SEM included code is provided for systems that don't implement W32 |
| semaphores, such as WinCE prior to version 3.0. An alternate implementation |
| of POSIX semaphores is built using W32 events for these systems when |
| NEED_SEM is defined. This code has been completely rewritten in this |
| release to reuse most of the default POSIX semaphore code, and particularly, |
| to implement all of the sem_* routines supported by pthreads-win32. Tim |
| Theisen also run the test suite over the NEED_SEM code on his MP system. All |
| tests passed. |
| |
| * The library now builds without errors for the Borland Builder 5.5 compiler. |
| |
| New features |
| ------------ |
| |
| * pthread_mutex_timedlock() and all sem_* routines provided by |
| pthreads-win32 are now implemented for WinCE versions prior to 3.0. Those |
| versions did not implement W32 semaphores. Define NEED_SEM in config.h when |
| building the library for these systems. |
| |
| Known issues in this release |
| ---------------------------- |
| |
| * pthread_once is too complicated - but it works as far as testing can |
| determine.. |
| |
| * The Borland version of the dll fails some of the tests with a memory read |
| exception. The cause is not yet known but a compiler bug has not been ruled |
| out. |
| |
| |
| RELEASE 2.3.0 |
| ------------- |
| (2005-04-12) |
| |
| General |
| ------- |
| |
| Release 1.7.0 is a backport of features and bug fixes new in |
| this release. See earlier notes under Release 2.0.0/General. |
| |
| Bugs fixed |
| ---------- |
| |
| * Fixed pthread_once potential for post once_routine cancellation |
| hanging due to starvation. See comments in pthread_once.c. |
| Momentary priority boosting is used to ensure that, after a |
| once_routine is cancelled, the thread that will run the |
| once_routine is not starved by higher priority waiting threads at |
| critical times. Priority boosting occurs only AFTER a once_routine |
| cancellation, and is applied only to that once_control. The |
| once_routine is run at the thread's normal base priority. |
| |
| New tests |
| --------- |
| |
| * once4.c: Aggressively tests pthread_once() under realtime |
| conditions using threads with varying priorities. Windows' |
| random priority boosting does not occur for threads with realtime |
| priority levels. |
| |
| |
| RELEASE 2.2.0 |
| ------------- |
| (2005-04-04) |
| |
| General |
| ------- |
| |
| * Added makefile targets to build static link versions of the library. |
| Both MinGW and MSVC. Please note that this does not imply any change |
| to the LGPL licensing, which still imposes psecific conditions on |
| distributing software that has been statically linked with this library. |
| |
| * There is a known bug in pthread_once(). Cancellation of the init_routine |
| exposes a potential starvation (i.e. deadlock) problem if a waiting thread |
| has a higher priority than the initting thread. This problem will be fixed |
| in version 3.0.0 of the library. |
| |
| Bugs fixed |
| ---------- |
| |
| * Fix integer overrun error in sem_timedwait(). |
| Kevin Lussier |
| |
| * Fix preprocessor directives for static linking. |
| Dimitar Panayotov |
| |
| |
| RELEASE 2.1.0 |
| ------------- |
| (2005-03-16) |
| |
| Bugs fixed |
| ---------- |
| |
| * Reverse change to pthread_setcancelstate() in 2.0.0. |
| |
| |
| RELEASE 2.0.0 |
| ------------- |
| (2005-03-16) |
| |
| General |
| ------- |
| |
| This release represents an ABI change and the DLL version naming has |
| incremented from 1 to 2, e.g. pthreadVC2.dll. |
| |
| Version 1.4.0 back-ports the new functionality included in this |
| release. Please distribute DLLs built from that version with updates |
| to applications built on pthreads-win32 version 1.x.x. |
| |
| The package naming has changed, replacing the snapshot date with |
| the version number + descriptive information. E.g. this |
| release is "pthreads-w32-2-0-0-release". |
| |
| Bugs fixed |
| ---------- |
| |
| * pthread_setcancelstate() no longer checks for a pending |
| async cancel event if the library is using alertable async |
| cancel. See the README file (Prerequisites section) for info |
| on adding alertable async cancelation. |
| |
| New features |
| ------------ |
| |
| * pthread_once() now supports init_routine cancellability. |
| |
| New tests |
| --------- |
| |
| * Agressively test pthread_once() init_routine cancellability. |
| |
| |
| SNAPSHOT 2005-03-08 |
| ------------------- |
| Version 1.3.0 |
| |
| Bug reports (fixed) |
| ------------------- |
| |
| * Implicitly created threads leave Win32 handles behind after exiting. |
| - Dmitrii Semii |
| |
| * pthread_once() starvation problem. |
| - Gottlob Frege |
| |
| New tests |
| --------- |
| |
| * More intense testing of pthread_once(). |
| |
| |
| SNAPSHOT 2005-01-25 |
| ------------------- |
| Version 1.2.0 |
| |
| Bug fixes |
| --------- |
| |
| * Attempted acquisition of a recursive mutex could cause waiting threads |
| to not be woken when the mutex was released. |
| - Ralf Kubis <RKubis at mc.com> |
| |
| * Various package omissions have been fixed. |
| |
| |
| SNAPSHOT 2005-01-03 |
| ------------------- |
| Version 1.1.0 |
| |
| Bug fixes |
| --------- |
| |
| * Unlocking recursive or errorcheck mutexes would sometimes |
| unexpectedly return an EPERM error (bug introduced in |
| snapshot-2004-11-03). |
| - Konstantin Voronkov <beowinkle at yahoo.com> |
| |
| |
| SNAPSHOT 2004-11-22 |
| ------------------- |
| Version 1.0.0 |
| |
| This snapshot primarily fixes the condvar bug introduced in |
| snapshot-2004-11-03. DLL versioning has also been included to allow |
| applications to runtime check the Microsoft compatible DLL version |
| information, and to extend the DLL naming system for ABI and major |
| (non-backward compatible) API changes. See the README file for details. |
| |
| Bug fixes |
| --------- |
| |
| * Condition variables no longer deadlock (bug introduced in |
| snapshot-2004-11-03). |
| - Alexander Kotliarov and Nicolas at saintmac |
| |
| * DLL naming extended to avoid 'DLL hell' in the future, and to |
| accommodate the ABI change introduced in snapshot-2004-11-03. Snapshot |
| 2004-11-03 will be removed from FTP sites. |
| |
| New features |
| ------------ |
| |
| * A Microsoft-style version resource has been added to the DLL for |
| applications that wish to check DLL compatibility at runtime. |
| |
| * Pthreads-win32 DLL naming has been extended to allow incompatible DLL |
| versions to co-exist in the same filesystem. See the README file for details, |
| but briefly: while the version information inside the DLL will change with |
| each release from now on, the DLL version names will only change if the new |
| DLL is not backward compatible with older applications. |
| |
| The versioning scheme has been borrowed from GNU Libtool, and the DLL |
| naming scheme is from Cygwin. Provided the Libtool-style numbering rules are |
| honoured, the Cygwin DLL naming scheme automatcally ensures that DLL name |
| changes are minimal and that applications will not load an incompatible |
| pthreads-win32 DLL. |
| |
| Those who use the pre-built DLLs will find that the DLL/LIB names have a new |
| suffix (1) in this snapshot. E.g. pthreadVC1.dll etc. |
| |
| * The POSIX thread ID reuse uniqueness feature introduced in the last snapshot |
| has been kept as default, but the behaviour can now be controlled when the DLL |
| is built to effectively switch it off. This makes the library much more |
| sensitive to applications that assume that POSIX thread IDs are unique, i.e. |
| are not strictly compliant with POSIX. See the PTW32_THREAD_ID_REUSE_INCREMENT |
| macro comments in config.h for details. |
| |
| Other changes |
| ------------- |
| Certain POSIX macros have changed. |
| |
| These changes are intended to conform to the Single Unix Specification version 3, |
| which states that, if set to 0 (zero) or not defined, then applications may use |
| sysconf() to determine their values at runtime. Pthreads-win32 does not |
| implement sysconf(). |
| |
| The following macros are no longer undefined, but defined and set to -1 |
| (not implemented): |
| |
| _POSIX_THREAD_ATTR_STACKADDR |
| _POSIX_THREAD_PRIO_INHERIT |
| _POSIX_THREAD_PRIO_PROTECT |
| _POSIX_THREAD_PROCESS_SHARED |
| |
| The following macros are defined and set to 200112L (implemented): |
| |
| _POSIX_THREADS |
| _POSIX_THREAD_SAFE_FUNCTIONS |
| _POSIX_THREAD_ATTR_STACKSIZE |
| _POSIX_THREAD_PRIORITY_SCHEDULING |
| _POSIX_SEMAPHORES |
| _POSIX_READER_WRITER_LOCKS |
| _POSIX_SPIN_LOCKS |
| _POSIX_BARRIERS |
| |
| The following macros are defined and set to appropriate values: |
| |
| _POSIX_THREAD_THREADS_MAX |
| _POSIX_SEM_VALUE_MAX |
| _POSIX_SEM_NSEMS_MAX |
| PTHREAD_DESTRUCTOR_ITERATIONS |
| PTHREAD_KEYS_MAX |
| PTHREAD_STACK_MIN |
| PTHREAD_THREADS_MAX |
| |
| |
| SNAPSHOT 2004-11-03 |
| ------------------- |
| |
| DLLs produced from this snapshot cannot be used with older applications without |
| recompiling the application, due to a change to pthread_t to provide unique POSIX |
| thread IDs. |
| |
| Although this snapshot passes the extended test suite, many of the changes are |
| fairly major, and some applications may show different behaviour than previously, |
| so adopt with care. Hopefully, any changed behaviour will be due to the library |
| being better at it's job, not worse. |
| |
| Bug fixes |
| --------- |
| |
| * pthread_create() no longer accepts NULL as the thread reference arg. |
| A segfault (memory access fault) will result, and no thread will be |
| created. |
| |
| * pthread_barrier_wait() no longer acts as a cancelation point. |
| |
| * Fix potential race condition in pthread_once() |
| - Tristan Savatier <tristan at mpegtv.com> |
| |
| * Changes to pthread_cond_destroy() exposed some coding weaknesses in several |
| test suite mini-apps because pthread_cond_destroy() now returns EBUSY if the CV |
| is still in use. |
| |
| New features |
| ------------ |
| |
| * Added for compatibility: |
| PTHREAD_RECURSIVE_MUTEX_INITIALIZER, |
| PTHREAD_ERRORCHECK_MUTEX_INITIALIZER, |
| PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, |
| PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP |
| |
| * Initial support for Digital Mars compiler |
| - Anuj Goyal <anuj.goyal at gmail.com> |
| |
| * Faster Mutexes. These have been been rewritten following a model provided by |
| Alexander Terekhov that reduces kernel space checks, and eliminates some additional |
| critical sections used to manage a race between timedlock expiration and unlock. |
| Please be aware that the new mutexes do not enforce strict absolute FIFO scheduling |
| of mutexes, however any out-of-order lock acquisition should be very rare. |
| |
| * Faster semaphores. Following a similar model to mutexes above, these have been |
| rewritten to use preliminary users space checks. |
| |
| * sem_getvalue() now returns the number of waiters. |
| |
| * The POSIX thread ID now has much stronger uniqueness characteristics. The library |
| garrantees not to reuse the same thread ID for at least 2^(wordsize) thread |
| destruction/creation cycles. |
| |
| New tests |
| --------- |
| |
| * semaphore4.c: Tests cancelation of the new sem_wait(). |
| |
| * semaphore4t.c: Likewise for sem_timedwait(). |
| |
| * rwlock8.c: Tests and times the slow execution paths of r/w locks, and the CVs, |
| mutexes, and semaphores that they're built on. |
| |
| |
| SNAPSHOT 2004-05-16 |
| ------------------- |
| |
| Attempt to add Watcom to the list of compilers that can build the library. |
| This failed in the end due to it's non-thread-aware errno. The library |
| builds but the test suite fails. See README.Watcom for more details. |
| |
| Bug fixes |
| --------- |
| * Bug and memory leak in sem_init() |
| - Alex Blanco <Alex.Blanco at motorola.com> |
| |
| * ptw32_getprocessors() now returns CPU count of 1 for WinCE. |
| - James Ewing <james.ewing at sveasoft.com> |
| |
| * pthread_cond_wait() could be canceled at a point where it should not |
| be cancelable. Fixed. |
| - Alexander Terekhov <TEREKHOV at de.ibm.com> |
| |
| * sem_timedwait() had an incorrect timeout calculation. |
| - Philippe Di Cristo <philipped at voicebox.com> |
| |
| * Fix a memory leak left behind after threads are destroyed. |
| - P. van Bruggen <pietvb at newbridges.nl> |
| |
| New features |
| ------------ |
| * Ported to AMD64. |
| - Makoto Kato <raven at oldskool.jp> |
| |
| * True pre-emptive asynchronous cancelation of threads. This is optional |
| and requires that Panagiotis E. Hadjidoukas's QueueUserAPCEx package be |
| installed. This package is included in the pthreads-win32 self-unpacking |
| Zip archive starting from this snapshot. See the README.txt file inside |
| the package for installation details. |
| |
| Note: If you don't use async cancelation in your application, or don't need |
| to cancel threads that are blocked on system resources such as network I/O, |
| then the default non-preemptive async cancelation is probably good enough. |
| However, pthreads-win32 auto-detects the availability of these components |
| at run-time, so you don't need to rebuild the library from source if you |
| change your mind later. |
| |
| All of the advice available in books and elsewhere on the undesirability |
| of using async cancelation in any application still stands, but this |
| feature is a welcome addition with respect to the library's conformance to |
| the POSIX standard. |
| |
| SNAPSHOT 2003-09-18 |
| ------------------- |
| |
| Cleanup of thread priority management. In particular, setting of thread |
| priority now attempts to map invalid Win32 values within the range returned |
| by sched_get_priority_min/max() to useful values. See README.NONPORTABLE |
| under "Thread priority". |
| |
| Bug fixes |
| --------- |
| * pthread_getschedparam() now returns the priority given by the most recent |
| call to pthread_setschedparam() or established by pthread_create(), as |
| required by the standard. Previously, pthread_getschedparam() incorrectly |
| returned the running thread priority at the time of the call, which may have |
| been adjusted or temporarily promoted/demoted. |
| |
| * sched_get_priority_min() and sched_get_priority_max() now return -1 on error |
| and set errno. Previously, they incorrectly returned the error value directly. |
| |
| |
| SNAPSHOT 2003-09-04 |
| ------------------- |
| |
| Bug fixes |
| --------- |
| * ptw32_cancelableWait() now allows cancelation of waiting implicit POSIX |
| threads. |
| |
| New test |
| -------- |
| * cancel8.c tests cancelation of Win32 threads waiting at a POSIX cancelation |
| point. |
| |
| |
| SNAPSHOT 2003-09-03 |
| ------------------- |
| |
| Bug fixes |
| --------- |
| * pthread_self() would free the newly created implicit POSIX thread handle if |
| DuplicateHandle failed instead of recycle it (very unlikely). |
| |
| * pthread_exit() was neither freeing nor recycling the POSIX thread struct |
| for implicit POSIX threads. |
| |
| New feature - Cancelation of/by Win32 (non-POSIX) threads |
| --------------------------------------------------------- |
| Since John Bossom's original implementation, the library has allowed non-POSIX |
| initialised threads (Win32 threads) to call pthreads-win32 routines and |
| therefore interact with POSIX threads. This is done by creating an on-the-fly |
| POSIX thread ID for the Win32 thread that, once created, allows fully |
| reciprical interaction. This did not extend to thread cancelation (async or |
| deferred). Now it does. |
| |
| Any thread can be canceled by any other thread (Win32 or POSIX) if the former |
| thread's POSIX pthread_t value is known. It's TSD destructors and POSIX |
| cleanup handlers will be run before the thread exits with an exit code of |
| PTHREAD_CANCELED (retrieved with GetExitCodeThread()). |
| |
| This allows a Win32 thread to, for example, call POSIX CV routines in the same way |
| that POSIX threads would/should, with pthread_cond_wait() cancelability and |
| cleanup handlers (pthread_cond_wait() is a POSIX cancelation point). |
| |
| By adding cancelation, Win32 threads should now be able to call all POSIX |
| threads routines that make sense including semaphores, mutexes, condition |
| variables, read/write locks, barriers, spinlocks, tsd, cleanup push/pop, |
| cancelation, pthread_exit, scheduling, etc. |
| |
| Note that these on-the-fly 'implicit' POSIX thread IDs are initialised as detached |
| (not joinable) with deferred cancelation type. The POSIX thread ID will be created |
| automatically by any POSIX routines that need a POSIX handle (unless the routine |
| needs a pthread_t as a parameter of course). A Win32 thread can discover it's own |
| POSIX thread ID by calling pthread_self(), which will create the handle if |
| necessary and return the pthread_t value. |
| |
| New tests |
| --------- |
| Test the above new feature. |
| |
| |
| SNAPSHOT 2003-08-19 |
| ------------------- |
| |
| This snapshot fixes some accidental corruption to new test case sources. |
| There are no changes to the library source code. |
| |
| |
| SNAPSHOT 2003-08-15 |
| ------------------- |
| |
| Bug fixes |
| --------- |
| |
| * pthread.dsp now uses correct compile flags (/MD). |
| - Viv <vcotirlea@hotmail.com> |
| |
| * pthread_win32_process_detach_np() fixed memory leak. |
| - Steven Reddie <Steven.Reddie@ca.com> |
| |
| * pthread_mutex_destroy() fixed incorrect return code. |
| - Nicolas Barry <boozai@yahoo.com> |
| |
| * pthread_spin_destroy() fixed memory leak. |
| - Piet van Bruggen <pietvb@newbridges.nl> |
| |
| * Various changes to tighten arg checking, and to work with later versions of |
| MinGW32 and MsysDTK. |
| |
| * pthread_getschedparam() etc, fixed dangerous thread validity checking. |
| - Nicolas Barry <boozai@yahoo.com> |
| |
| * POSIX thread handles are now reused and their memory is not freed on thread exit. |
| This allows for stronger thread validity checking. |
| |
| New standard routine |
| -------------------- |
| |
| * pthread_kill() added to provide thread validity checking to applications. |
| It does not accept any non zero values for the signal arg. |
| |
| New test cases |
| -------------- |
| |
| * New test cases to confirm validity checking, pthread_kill(), and thread reuse. |
| |
| |
| SNAPSHOT 2003-05-10 |
| ------------------- |
| |
| Bug fixes |
| --------- |
| |
| * pthread_mutex_trylock() now returns correct error values. |
| pthread_mutex_destroy() will no longer destroy a recursively locked mutex. |
| pthread_mutex_lock() is no longer inadvertantly behaving as a cancelation point. |
| - Thomas Pfaff <tpfaff@gmx.net> |
| |
| * pthread_mutex_timedlock() no longer occasionally sets incorrect mutex |
| ownership, causing deadlocks in some applications. |
| - Robert Strycek <strycek@posam.sk> and Alexander Terekhov <TEREKHOV@de.ibm.com> |
| |
| |
| SNAPSHOT 2002-11-04 |
| ------------------- |
| |
| Bug fixes |
| --------- |
| |
| * sem_getvalue() now returns the correct value under Win NT and WinCE. |
| - Rob Fanner <rfanner@stonethree.com> |
| |
| * sem_timedwait() now uses tighter checks for unreasonable |
| abstime values - that would result in unexpected timeout values. |
| |
| * ptw32_cond_wait_cleanup() no longer mysteriously consumes |
| CV signals but may produce more spurious wakeups. It is believed |
| that the sem_timedwait() call is consuming a CV signal that it |
| shouldn't. |
| - Alexander Terekhov <TEREKHOV@de.ibm.com> |
| |
| * Fixed a memory leak in ptw32_threadDestroy() for implicit threads. |
| |
| * Fixed potential for deadlock in pthread_cond_destroy(). |
| A deadlock could occur for statically declared CVs (PTHREAD_COND_INITIALIZER), |
| when one thread is attempting to destroy the condition variable while another |
| is attempting to dynamically initialize it. |
| - Michael Johnson <michaelj@maine.rr.com> |
| |
| |
| SNAPSHOT 2002-03-02 |
| ------------------- |
| |
| Cleanup code default style. (IMPORTANT) |
| ---------------------------------------------------------------------- |
| Previously, if not defined, the cleanup style was determined automatically |
| from the compiler/language, and one of the following was defined accordingly: |
| |
| __CLEANUP_SEH MSVC only |
| __CLEANUP_CXX C++, including MSVC++, GNU G++ |
| __CLEANUP_C C, including GNU GCC, not MSVC |
| |
| These defines determine the style of cleanup (see pthread.h) and, |
| most importantly, the way that cancelation and thread exit (via |
| pthread_exit) is performed (see the routine ptw32_throw() in private.c). |
| |
| In short, the exceptions versions of the library throw an exception |
| when a thread is canceled or exits (via pthread_exit()), which is |
| caught by a handler in the thread startup routine, so that the |
| the correct stack unwinding occurs regardless of where the thread |
| is when it's canceled or exits via pthread_exit(). |
| |
| In this and future snapshots, unless the build explicitly defines (e.g. |
| via a compiler option) __CLEANUP_SEH, __CLEANUP_CXX, or __CLEANUP_C, then |
| the build NOW always defaults to __CLEANUP_C style cleanup. This style |
| uses setjmp/longjmp in the cancelation and pthread_exit implementations, |
| and therefore won't do stack unwinding even when linked to applications |
| that have it (e.g. C++ apps). This is for consistency with most |
| current commercial Unix POSIX threads implementations. Compaq's TRU64 |
| may be an exception (no pun intended) and possible future trend. |
| |
| Although it was not clearly documented before, it is still necessary to |
| build your application using the same __CLEANUP_* define as was |
| used for the version of the library that you link with, so that the |
| correct parts of pthread.h are included. That is, the possible |
| defines require the following library versions: |
| |
| __CLEANUP_SEH pthreadVSE.dll |
| __CLEANUP_CXX pthreadVCE.dll or pthreadGCE.dll |
| __CLEANUP_C pthreadVC.dll or pthreadGC.dll |
| |
| E.g. regardless of whether your app is C or C++, if you link with |
| pthreadVC.lib or libpthreadGC.a, then you must define __CLEANUP_C. |
| |
| |
| THE POINT OF ALL THIS IS: if you have not been defining one of these |
| explicitly, then the defaults as described at the top of this |
| section were being used. |
| |
| THIS NOW CHANGES, as has been explained above, but to try to make this |
| clearer here's an example: |
| |
| If you were building your application with MSVC++ i.e. using C++ |
| exceptions and not explicitly defining one of __CLEANUP_*, then |
| __CLEANUP_C++ was automatically defined for you in pthread.h. |
| You should have been linking with pthreadVCE.dll, which does |
| stack unwinding. |
| |
| If you now build your application as you had before, pthread.h will now |
| automatically set __CLEANUP_C as the default style, and you will need to |
| link with pthreadVC.dll. Stack unwinding will now NOT occur when a thread |
| is canceled, or the thread calls pthread_exit(). |
| |
| Your application will now most likely behave differently to previous |
| versions, and in non-obvious ways. Most likely is that locally |
| instantiated objects may not be destroyed or cleaned up after a thread |
| is canceled. |
| |
| If you want the same behaviour as before, then you must now define |
| __CLEANUP_C++ explicitly using a compiler option and link with |
| pthreadVCE.dll as you did before. |
| |
| |
| WHY ARE WE MAKING THE DEFAULT STYLE LESS EXCEPTION-FRIENDLY? |
| Because no commercial Unix POSIX threads implementation allows you to |
| choose to have stack unwinding. Therefore, providing it in pthread-win32 |
| as a default is dangerous. We still provide the choice but unless |
| you consciously choose to do otherwise, your pthreads applications will |
| now run or crash in similar ways irrespective of the threads platform |
| you use. Or at least this is the hope. |
| |
| |
| WHY NOT REMOVE THE EXCEPTIONS VERSIONS OF THE LIBRARY ALTOGETHER? |
| There are a few reasons: |
| - because there are well respected POSIX threads people who believe |
| that POSIX threads implementations should be exceptions aware and |
| do the expected thing in that context. (There are equally respected |
| people who believe it should not be easily accessible, if it's there |
| at all, for unconditional conformity to other implementations.) |
| - because pthreads-win32 is one of the few implementations that has |
| the choice, perhaps the only freely available one, and so offers |
| a laboratory to people who may want to explore the effects; |
| - although the code will always be around somewhere for anyone who |
| wants it, once it's removed from the current version it will not be |
| nearly as visible to people who may have a use for it. |
| |
| |
| Source module splitting |
| ----------------------- |
| In order to enable smaller image sizes to be generated |
| for applications that link statically with the library, |
| most routines have been separated out into individual |
| source code files. |
| |
| This is being done in such a way as to be backward compatible. |
| The old source files are reused to congregate the individual |
| routine files into larger translation units (via a bunch of |
| # includes) so that the compiler can still optimise wherever |
| possible, e.g. through inlining, which can only be done |
| within the same translation unit. |
| |
| It is also possible to build the entire library by compiling |
| the single file named "pthread.c", which just #includes all |
| the secondary congregation source files. The compiler |
| may be able to use this to do more inlining of routines. |
| |
| Although the GNU compiler is able to produce libraries with |
| the necessary separation (the -ffunction-segments switch), |
| AFAIK, the MSVC and other compilers don't have this feature. |
| |
| Finally, since I use makefiles and command-line compilation, |
| I don't know what havoc this reorganisation may wreak amongst |
| IDE project file users. You should be able to continue |
| using your existing project files without modification. |
| |
| |
| New non-portable functions |
| -------------------------- |
| pthread_num_processors_np(): |
| Returns the number of processors in the system that are |
| available to the process, as determined from the processor |
| affinity mask. |
| |
| pthread_timechange_handler_np(): |
| To improve tolerance against operator or time service initiated |
| system clock changes. |
| |
| This routine can be called by an application when it |
| receives a WM_TIMECHANGE message from the system. At present |
| it broadcasts all condition variables so that waiting threads |
| can wake up and re-evaluate their conditions and restart |
| their timed waits if required. |
| - Suggested by Alexander Terekhov |
| |
| |
| Platform dependence |
| ------------------- |
| As Win95 doesn't provide one, the library now contains |
| it's own InterlockedCompareExchange() routine, which is used |
| whenever Windows doesn't provide it. InterlockedCompareExchange() |
| is used to implement spinlocks and barriers, and also in mutexes. |
| This routine relies on the CMPXCHG machine instruction which |
| is not available on i386 CPUs. This library (from snapshot |
| 20010712 onwards) is therefore no longer supported on i386 |
| processor platforms. |
| |
| |
| New standard routines |
| --------------------- |
| For source code portability only - rwlocks cannot be process shared yet. |
| |
| pthread_rwlockattr_init() |
| pthread_rwlockattr_destroy() |
| pthread_rwlockattr_setpshared() |
| pthread_rwlockattr_getpshared() |
| |
| As defined in the new POSIX standard, and the Single Unix Spec version 3: |
| |
| sem_timedwait() |
| pthread_mutex_timedlock() - Alexander Terekhov and Thomas Pfaff |
| pthread_rwlock_timedrdlock() - adapted from pthread_rwlock_rdlock() |
| pthread_rwlock_timedwrlock() - adapted from pthread_rwlock_wrlock() |
| |
| |
| pthread.h no longer includes windows.h |
| -------------------------------------- |
| [Not yet for G++] |
| |
| This was done to prevent conflicts. |
| |
| HANDLE, DWORD, and NULL are temporarily defined within pthread.h if |
| they are not already. |
| |
| |
| pthread.h, sched.h and semaphore.h now use dllexport/dllimport |
| -------------------------------------------------------------- |
| Not only to avoid the need for the pthread.def file, but to |
| improve performance. Apparently, declaring functions with dllimport |
| generates a direct call to the function and avoids the overhead |
| of a stub function call. |
| |
| Bug fixes |
| --------- |
| * Fixed potential NULL pointer dereferences in pthread_mutexattr_init, |
| pthread_mutexattr_getpshared, pthread_barrierattr_init, |
| pthread_barrierattr_getpshared, and pthread_condattr_getpshared. |
| - Scott McCaskill <scott@magruder.org> |
| |
| * Removed potential race condition in pthread_mutex_trylock and |
| pthread_mutex_lock; |
| - Alexander Terekhov <TEREKHOV@de.ibm.com> |
| |
| * The behaviour of pthread_mutex_trylock in relation to |
| recursive mutexes was inconsistent with commercial implementations. |
| Trylock would return EBUSY if the lock was owned already by the |
| calling thread regardless of mutex type. Trylock now increments the |
| recursion count and returns 0 for RECURSIVE mutexes, and will |
| return EDEADLK rather than EBUSY for ERRORCHECK mutexes. This is |
| consistent with Solaris. |
| - Thomas Pfaff <tpfaff@gmx.net> |
| |
| * Found a fix for the library and workaround for applications for |
| the known bug #2, i.e. where __CLEANUP_CXX or __CLEANUP_SEH is defined. |
| See the "Known Bugs in this snapshot" section below. |
| |
| This could be made transparent to applications by replacing the macros that |
| define the current C++ and SEH versions of pthread_cleanup_push/pop |
| with the C version, but AFAIK cleanup handlers would not then run in the |
| correct sequence with destructors and exception cleanup handlers when |
| an exception occurs. |
| |
| * Cancelation once started in a thread cannot now be inadvertantly |
| double canceled. That is, once a thread begins it's cancelation run, |
| cancelation is disabled and a subsequent cancel request will |
| return an error (ESRCH). |
| |
| * errno: An incorrect compiler directive caused a local version |
| of errno to be used instead of the Win32 errno. Both instances are |
| thread-safe but applications checking errno after a pthreads-win32 |
| call would be wrong. Fixing this also fixed a bad compiler |
| option in the testsuite (/MT should have been /MD) which is |
| needed to link with the correct library MSVCRT.LIB. |
| |
| |
| SNAPSHOT 2001-07-12 |
| ------------------- |
| |
| To be added |
| |
| |
| SNAPSHOT 2001-07-03 |
| ------------------- |
| |
| To be added |
| |
| |
| SNAPSHOT 2000-08-13 |
| ------------------- |
| |
| New: |
| - Renamed DLL and LIB files: |
| pthreadVSE.dll (MS VC++/Structured EH) |
| pthreadVSE.lib |
| pthreadVCE.dll (MS VC++/C++ EH) |
| pthreadVCE.lib |
| pthreadGCE.dll (GNU G++/C++ EH) |
| libpthreadw32.a |
| |
| Both your application and the pthread dll should use the |
| same exception handling scheme. |
| |
| Bugs fixed: |
| - MSVC++ C++ exception handling. |
| |
| Some new tests have been added. |
| |
| |
| SNAPSHOT 2000-08-10 |
| ------------------- |
| |
| New: |
| - asynchronous cancelation on X86 (Jason Nye) |
| - Makefile compatible with MS nmake to replace |
| buildlib.bat |
| - GNUmakefile for Mingw32 |
| - tests/Makefile for MS nmake replaces runall.bat |
| - tests/GNUmakefile for Mingw32 |
| |
| Bugs fixed: |
| - kernel32 load/free problem |
| - attempt to hide internel exceptions from application |
| exception handlers (__try/__except and try/catch blocks) |
| - Win32 thread handle leakage bug |
| (David Baggett/Paul Redondo/Eyal Lebedinsky) |
| |
| Some new tests have been added. |
| |
| |
| SNAPSHOT 1999-11-02 |
| ------------------- |
| |
| Bugs fixed: |
| - ctime_r macro had an incorrect argument (Erik Hensema), |
| - threads were not being created |
| PTHREAD_CANCEL_DEFERRED. This should have |
| had little effect as deferred is the only |
| supported type. (Ross Johnson). |
| |
| Some compatibility improvements added, eg. |
| - pthread_setcancelstate accepts NULL pointer |
| for the previous value argument. Ditto for |
| pthread_setcanceltype. This is compatible |
| with Solaris but should not affect |
| standard applications (Erik Hensema) |
| |
| Some new tests have been added. |
| |
| |
| SNAPSHOT 1999-10-17 |
| ------------------- |
| |
| Bug fix - Cancelation of threads waiting on condition variables |
| now works properly (Lorin Hochstein and Peter Slacik) |
| |
| |
| SNAPSHOT 1999-08-12 |
| ------------------- |
| |
| Fixed exception stack cleanup if calling pthread_exit() |
| - (Lorin Hochstein and John Bossom). |
| |
| Fixed bugs in condition variables - (Peter Slacik): |
| - additional contention checks |
| - properly adjust number of waiting threads after timed |
| condvar timeout. |
| |
| |
| SNAPSHOT 1999-05-30 |
| ------------------- |
| |
| Some minor bugs have been fixed. See the ChangeLog file for details. |
| |
| Some more POSIX 1b functions are now included but ony return an |
| error (ENOSYS) if called. They are: |
| |
| sem_open |
| sem_close |
| sem_unlink |
| sem_getvalue |
| |
| |
| SNAPSHOT 1999-04-07 |
| ------------------- |
| |
| Some POSIX 1b functions which were internally supported are now |
| available as exported functions: |
| |
| sem_init |
| sem_destroy |
| sem_wait |
| sem_trywait |
| sem_post |
| sched_yield |
| sched_get_priority_min |
| sched_get_priority_max |
| |
| Some minor bugs have been fixed. See the ChangeLog file for details. |
| |
| |
| SNAPSHOT 1999-03-16 |
| ------------------- |
| |
| Initial release. |
| |