diff options
Diffstat (limited to 'ANNOUNCE')
-rw-r--r-- | ANNOUNCE | 177 |
1 files changed, 123 insertions, 54 deletions
@@ -1,5 +1,5 @@ - PTHREADS-WIN32 SNAPSHOT 2000-12-29
+ PTHREADS-WIN32 SNAPSHOT ????-??-??
----------------------------------
Web Site: http://sources.redhat.com/pthreads-win32/
FTP Site: ftp://sources.redhat.com/pub/pthreads-win32
@@ -13,6 +13,10 @@ Win32 environment. Some functions from POSIX 1003.1b are also supported including semaphores. Other related functions include
the set of read-write lock functions.
+Parts of the implementation also comply with the Open Group's
+Unix 98 specification for compatibility with major Unix
+implementations and Linux.
+
Pthreads-win32 is free software, distributed under the GNU Library
General Public License (LGPL).
@@ -26,57 +30,114 @@ Change Summary (since the last snapshot) (See the ChangeLog file for details.)
New:
-- New non-portable functions for use when statically linking the library
- (see the README file):
- pthread_delay_np
- pthread_win32_process_attach_np
- pthread_win32_process_detach_np
- pthread_win32_thread_attach_np
- pthread_win32_thread_detach_np
- Also, the start of support within the library for statically
- linked applications, but this has not been tested by statically
- linking yet.
-- A fully working MinGW32 g++ compiled version of the library
- is now supplied. To use with g++ compiled applications
- please see the FAQ "How do I generate pthreadGCE.dll and
- libpthreadw32.a for use with Mingw32", which you need to do
- before compiling and linking applications as well.
-- Unhandled exceptions, whether SEH or C++, are no longer
- silently caught and ignored but are passed out of threads for
- the system to deal with. C++ applications can override
- the default termination handler via set_terminate().
- set_terminate() works fine for MinGW32 g++ but not yet with MS VC++
- (see known bugs (2)) even though it's the same code. See
- tests/exception3.c for an example of using set_terminate().
+- Async cancellation should now work for Windows running
+ on the following processors: IX86, MIPS, ALPHA, PPC.
+ - contributors name misplaced (please contact me if it's you)
+
+- New functions (no-ops) for source code compatibility:
+ pthread_getconcurrency()
+ Returns the value previously set by
+ pthread_setconcurrency() or 0 (zero)
+ if no value was previously set.
+ The implementation does not currently use
+ this value.
+ pthread_setconcurrency()
+ Accepts any value >= 0 but does not
+ have any effect; returns '0' or
+ EINVAL if the value is < 0
+ pthread_attr_getscope()
+ pthread_attr_setscope()
+ Currently only return ENOSYS
+
+- The following mutex types and related functions are now
+ supported:
+
+ pthread_mutexattr_gettype()
+ pthread_mutexattr_settype()
+ PTHREAD_MUTEX_DEFAULT
+ PTHREAD_MUTEX_NORMAL or PTHREAD_MUTEX_FAST_NP
+ PTHREAD_MUTEX_ERRORCHECK or PTHREAD_MUTEX_ERRORCHECK_NP
+ PTHREAD_MUTEX_RECURSIVE or PTHREAD_MUTEX_RECURSIVE_NP
+
+ The *_NP versions are for Linux portability.
+
+ In this implementation PTHREAD_MUTEX_DEFAULT is
+ mapped to PTHREAD_MUTEX_NORMAL for compatibility
+ with major Unix vendors. This is also the default
+ if no type is specified.
+
+ Please note that the default behaviour in previous
+ versions of the library was equivalent to
+ PTHREAD_MUTEX_RECURSIVE. This will be a problem
+ for some applications unless they are updated to
+ explicitly set the type of any mutexes that are, or
+ could be, locked recursively.
+
+ PTHREAD_MUTEX_NORMAL will cause thread deadlock
+ if the owner of a mutex tries to relock it without
+ first unlocking it. It has slightly less overhead
+ that other types.
+
+- Pthreads-win32 mutexes are now based on Win32
+ critical sections for all Windows versions. The
+ implementation no longer depends on
+ TryEnterCriticalSection.
+ - Thomas Pfaff <tpfaff@gmx.net>
Bugs fixed:
-- Pthread_mutex_unlock() now returns EPERM if the unlocking
- thread does not currently hold the thread.
-- Args in the ctime_r macro in pthread.h are fixed.
-- Made semaphore.h independent of config.h when building
- applications. Don't know how this went unnoticed for so long
- - the default defines must have been correct for my test
- environment.
-
-Some new tests have been added.
+- Pthread_mutex_trylock() now properly returns EBUSY
+ even when the current thread owns the mutex.
+ Consequently, pthread_mutex_destroy() will no longer
+ destroy a locked mutex (it will return EBUSY).
+ - Thomas Pfaff <tpfaff@gmx.net>
+- Errno warnings and building with /MD;
+ calling conventions (stdcall v cdecl);
+ thread termination problems;
+ - Milan Gardian <Milan.Gardian@LEIBINGER.com>
Known bugs in this snapshot
---------------------------
-1. Asynchronous cancelation only works on Intel X86 machines.
-
-2. Under MS VC++ (only tested with version 6.0), a term_func
+1. Under MS VC++ (only tested with version 6.0), a term_func
set via the standard C++ set_terminate() function is not called
for some reason. The code - in private.c:ptw32_threadStart() -
makes an explicit call to terminate() which works as expected
under MinGW32 g++ doesn't appear to run the term_func under
MC VC++ 6.0.
-3. This is an interim snapshot as there are still some additional
- patches to go in, eg. to fix problems with errno support under
- some circumstances. Some people are seeing compile warnings
- to do with _errno.
+2. Cancellation problems in optimised code
+ - Milan Gardian
+
+ The cancellation (actually, cleanup-after-cancel) tests fail when using VC
+ (professional) optimisation switches (/O1 or /O2) in pthreads library. I
+ have not investigated which concrete optimisation technique causes this
+ problem (/Og, /Oi, /Ot, /Oy, /Ob1, /Gs, /Gf, /Gy, etc.), but here is a
+ summary of builds and corresponding failures:
+
+ * pthreads VSE (optimised tests): OK
+ * pthreads VCE (optimised tests): Failed "cleanup1" test (runtime)
+
+ * pthreads VSE (DLL in CRT, optimised tests): OK
+ * pthreads VCE (DLL in CRT, optimised tests): Failed "cleanup1" test
+ (runtime)
+
+ Please note that while in VSE version of the pthreads library the
+ optimisation does not really have any impact on the tests (they pass OK), in
+ VCE version addition of optimisation (/O2 in this case) causes the tests to
+ fail uniformly - either in "cleanup0" or "cleanup1" test cases.
+
+ Please note that all the tests above use default pthreads DLL (no
+ optimisations, linked with either static or DLL CRT, based on test type).
+ Therefore the problem lies not within the pthreads DLL but within the
+ compiled client code (the application using pthreads -> involvement of
+ "pthread.h").
+
+ I think the message of this section is that usage of VCE version of pthreads
+ in applications relying on cancellation/cleanup AND using optimisations for
+ creation of production code is highly unreliable for the current version of
+ the pthreads library.
+
Caveats
-------
@@ -166,7 +227,11 @@ The following functions are implemented: pthread_mutexattr_destroy
pthread_mutexattr_getpshared
pthread_mutexattr_setpshared
-
+ pthread_mutexattr_gettype
+ pthread_mutexattr_settype (types: PTHREAD_MUTEX_DEFAULT
+ PTHREAD_MUTEX_NORMAL
+ PTHREAD_MUTEX_ERRORCHECK
+ PTHREAD_MUTEX_RECURSIVE )
pthread_mutex_init
pthread_mutex_destroy
pthread_mutex_lock
@@ -219,6 +284,10 @@ The following functions are implemented: pthread_attr_setschedparam
pthread_getschedparam
pthread_setschedparam
+ pthread_getconcurrency (always returns '0' indicating system default)
+ pthread_setconcurrency (accepts any value >= 0 but is ignored)
+ pthread_attr_getscope (returns an error ENOSYS)
+ pthread_attr_setscope (returns an error ENOSYS)
sched_get_priority_max (POSIX 1b)
sched_get_priority_min (POSIX 1b)
sched_yield (POSIX 1b)
@@ -229,15 +298,15 @@ The following functions are implemented: pthread_sigmask
---------------------------
- Non-portable routines (see the README file for usage)
+ Non-portable routines (see the README.NONPORTABLE file for usage)
---------------------------
- pthread_mutexattr_setforcecs_np
pthread_getw32threadhandle_np
- pthread_delay_np
- pthread_win32_process_attach_np
- pthread_win32_process_detach_np
- pthread_win32_thread_attach_np
- pthread_win32_thread_detach_np
+ pthread_delay_np
+ pthread_mutex_setdefaulttype_np
+ pthread_win32_process_attach_np
+ pthread_win32_process_detach_np
+ pthread_win32_thread_attach_np
+ pthread_win32_thread_detach_np
---------------------------
Static Initializers (macros)
@@ -265,10 +334,8 @@ The following functions are not implemented: ---------------------------
pthread_attr_getinheritsched
pthread_attr_getschedpolicy
- pthread_attr_getscope
pthread_attr_setinheritsched
pthread_attr_setschedpolicy
- pthread_attr_setscope
pthread_mutex_getprioceiling
pthread_mutex_setprioceiling
pthread_mutex_attr_getprioceiling
@@ -344,20 +411,22 @@ Mailing List There is a mailing list for discussing pthreads on Win32. To join,
send email to:
- pthreads-win32-subscribe@sources.redhat.com
+ pthreads-win32-subscribe@sourceware.cygnus.com
Application Development Environments
------------------------------------
MSVC:
-MSVC using SEH works.
-MSVC using C++ EH works.
+MSVC using SEH works. Distribute pthreadVSE.dll with your application.
+MSVC using C++ EH works. Distribute pthreadVCE.dll with your application.
Mingw32:
You need gcc-2.95.2-1 modified as per pthreads-win32 FAQ answer (6), with
binutils-19990818-1 and msvcrt runtime-2000-03-27. Mingw32 must use
-the thread-safe MSVCRT library (see the FAQ).
+the thread-safe MSVCRT library (see the FAQ). You need to distribute
+the gcc.dll DLL from Mingw32 with your application (as well as
+pthreadGCE.dll of course).
Cygwin: (http://sourceware.cygnus.com/cygwin/)
Cygwin aims to provide a complete POSIX environment on top of Win32, including
@@ -382,7 +451,7 @@ For convenience, the following pre-built files are available on the FTP site pthreadVCE.lib
pthreadVSE.dll - built with MSVC compiler using SEH
pthreadVSE.lib
- pthreadGCE.dll - built with Mingw32 G++
+ pthreadGCE.dll - built with Mingw32 G++ 2.95.2-1
libpthreadw32.a - derived from pthreadGCE.dll
These are the only files you need in order to build POSIX threads
|