diff options
| author | rpj <rpj> | 2005-03-16 01:33:20 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2005-03-16 01:33:20 +0000 | 
| commit | 37f6fe772e5779120d2ee372c5d51ff60b6801dc (patch) | |
| tree | b611e6b1c26e36a32e761962ab6693b02744c784 | |
| parent | 3d32060783bcaf10f38ff6eef6fcf5711bfeada4 (diff) | |
| -rw-r--r-- | ANNOUNCE | 15 | ||||
| -rw-r--r-- | BUGS | 11 | ||||
| -rw-r--r-- | CONTRIBUTORS | 236 | ||||
| -rw-r--r-- | ChangeLog | 49 | ||||
| -rw-r--r-- | NEWS | 62 | ||||
| -rw-r--r-- | global.c | 8 | ||||
| -rw-r--r-- | pthread_setcancelstate.c | 2 | ||||
| -rw-r--r-- | pthread_win32_attach_detach_np.c | 1 | ||||
| -rw-r--r-- | tests/ChangeLog | 7 | ||||
| -rw-r--r-- | tests/mutex5.c | 18 | ||||
| -rw-r--r-- | tests/test.h | 9 | 
11 files changed, 240 insertions, 178 deletions
| @@ -1,16 +1,11 @@ -		 PTHREADS-WIN32 SNAPSHOT 2005-03-08
 -		 ----------------------------------
 +	    PTHREADS-WIN32  RELEASE  1.4.0 (2005-03-16)
 +	    -------------------------------------------
  	 Web Site: http://sources.redhat.com/pthreads-win32/
  	FTP Site: ftp://sources.redhat.com/pub/pthreads-win32
  	 Maintainer: Ross Johnson <rpj@callisto.canberra.edu.au>
 -[Please note: snapshots from 2004-11-03 are using a new mutex implementation
 -and should be regarded as beta code. You may not want to use it in production
 -yet but please try it if you can. No mutex related problems have been reported -since snapshot 2005-01-25.]
 - -We are pleased to announce the availability of a new snapshot of
 +We are pleased to announce the availability of a new release of
  Pthreads-win32, an Open Source Software implementation of the
  Threads component of the POSIX 1003.1 2001 Standard for Microsoft's
  Win32 environment. Some functions from other sections of POSIX
 @@ -54,8 +49,8 @@ As much as possible, the ChangeLog file acknowledges contributions to the  code base in more detail.
 -Changes since the last snapshot
 --------------------------------
 +Changes since the last release
 +------------------------------
  These are now documented in the NEWS file.
  See the ChangeLog file also.
 @@ -25,16 +25,17 @@ Known bugs  2. Cancellation problems in optimised code
     - Milan Gardian
 +   This is suspected to be a compiler bug in VC6.0, and also seen in
 +   VC7.0 and VS .NET 2003. The GNU C++ compiler does not have a problem
 +   with this test, and it has been reported that the Intel C++ 8.1 compiler
 +   and Visual C++ 2005 Express Edition Beta2 are also ok with this test.
 +     Workaround [rpj - 2 Feb 2002]
     -----------------------------
     [Please note: this workaround did not solve a similar problem in
     snapshot-2004-11-03 or later, even though similar symptoms were seen.
     tests\semaphore4.c fails in that snapshot for the VCE version of the
 -   DLL. It is suspected to be a compiler bug in VC6.0, and also seen in
 -   VC7.0 and VS .NET 2003. The GNU C++ compiler does not have a problem
 -   with this test, and it has been reported (2005-03-05/08) that the Intel
 -   C++ 8.1 compiler and Visual C++ 2005 Express Edition Beta2 are also -   ok with this test.]
 +   DLL.]     The problem disappears when /Ob0 is used, i.e. /O2 /Ob0 works OK,
     but if you want to use inlining optimisation you can be much more
 diff --git a/CONTRIBUTORS b/CONTRIBUTORS index c23ce98..23adbc7 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1,119 +1,121 @@ -Contributors (in approximate order of appearance) +Contributors (in approximate order of appearance)
 -[See also the ChangeLog file where individuals are -attributed in log entries. Likewise in the FAQ file.] +[See also the ChangeLog file where individuals are
 +attributed in log entries. Likewise in the FAQ file.]
 -Ben Elliston		bje at cygnus dot com -					Initiated the project; -					setup the project infrastructure (CVS, web page, etc.); -					early prototype routines. -Ross Johnson		rpj at callisto dot canberra dot edu dot au -					early prototype routines; -					ongoing project coordination/maintenance; -					implementation of spin locks and barriers; -					bug fixes; -					documentation; -					testsuite. -Robert Colquhoun	rjc at trump dot net dot au -					Early bug fixes. -John E. Bossom		John dot Bossom at cognos dot com -					Contributed substantial original working implementation; -					bug fixes; -					ongoing guidance and standards interpretation. -Anders Norlander	anorland at hem2 dot passagen dot se -					Early enhancements and runtime checking for supported -					Win32 routines. -Tor Lillqvist		tml at iki dot fi -					General enhancements; -					early bug fixes to condition variables. -Scott Lightner		scott at curriculum dot com -					Bug fix. -Kevin Ruland		Kevin dot Ruland at anheuser-busch dot com -					Various bug fixes. -Mike Russo		miker at eai dot com -					Bug fix. -Mark E. Armstrong	avail at pacbell dot net -					Bug fixes. -Lorin Hochstein 	lmh at xiphos dot ca -					general bug fixes; bug fixes to condition variables. -Peter Slacik		Peter dot Slacik at tatramed dot sk -					Bug fixes. -Mumit Khan		khan at xraylith dot wisc dot edu -					Fixes to work with Mingw32. -Milan Gardian		mg at tatramed dot sk -					Bug fixes and reports/analyses of obscure problems. -Aurelio Medina		aureliom at crt dot com -					First implementation of read-write locks. -Graham Dumpleton	Graham dot Dumpleton at ra dot pad dot otc dot telstra dot com dot au -					Bug fix in condition variables. -Tristan Savatier	tristan at mpegtv dot com -					WinCE port. -Erik Hensema		erik at hensema dot xs4all dot nl -					Bug fixes. -Rich Peters		rpeters at micro-magic dot com -Todd Owen		towen at lucidcalm dot dropbear dot id dot au -					Bug fixes to dll loading. -Jason Nye		jnye at nbnet dot nb dot ca -					Implementation of async cancelation. -Fred Forester		fforest at eticomm dot net -Kevin D. Clark		kclark at cabletron dot com -David Baggett		dmb at itasoftware dot com -					Bug fixes. -Paul Redondo		paul at matchvision dot com -Scott McCaskill 	scott at 3dfx dot com -					Bug fixes. -Jef Gearhart		jgearhart at tpssys dot com -					Bug fix. -Arthur Kantor		akantor at bexusa dot com -					Mutex enhancements. -Steven Reddie		smr at essemer dot com dot au -					Bug fix. -Alexander Terekhov	TEREKHOV at de dot ibm dot com -					Re-implemented and improved read-write locks; -					(with Louis Thomas) re-implemented and improved -					condition variables; -					enhancements to semaphores; -					enhancements to mutexes; -					new mutex implementation in 'futex' style; -					system clock change handling re CV timeouts; -					bug fixes. -Thomas Pfaff		tpfaff at gmx dot net -					Changes to make C version usable with C++ applications; -					re-implemented mutex routines to avoid Win32 mutexes -					and TryEnterCriticalSection; -					procedure to fix Mingw32 thread-safety issues. -Franco Bez		franco dot bez at gmx dot de -					procedure to fix Mingw32 thread-safety issues. -Louis Thomas		lthomas at arbitrade dot com -					(with Alexander Terekhov) re-implemented and improved -					condition variables. -David Korn		dgk at research dot att dot com -					Ported to UWIN. -Phil Frisbie, Jr.	phil at hawksoft dot com -					Bug fix. -Ralf Brese		Ralf dot Brese at pdb4 dot siemens dot de -					Bug fix. -prionx at juno dot com 	prionx at juno dot com -					Bug fixes. -Max Woodbury		mtew at cds dot duke dot edu -					POSIX versioning conditionals; -					reduced namespace pollution; -					idea to separate routines to reduce statically -					linked image sizes. -Rob Fanner		rfanner at stonethree dot com -					Bug fix. -Michael Johnson 	michaelj at maine dot rr dot com -					Bug fix. -Nicolas Barry		boozai at yahoo dot com -					Bug fixes. -Piet van Bruggen	pietvb at newbridges dot nl -					Bug fix. -Makoto Kato		raven at oldskool dot jp -					AMD64 port. -Panagiotis E. Hadjidoukas	peh at hpclab dot ceid dot upatras dot gr -					Contributed the QueueUserAPCEx package which -					makes preemptive async cancelation possible. -Will Bryant		will dot bryant at ecosm dot com -					Borland compiler patch and makefile. -Anuj Goyal		anuj dot goyal at gmail dot com -					Port to Digital Mars compiler. +Ben Elliston		bje at cygnus dot com
 +					Initiated the project;
 +					setup the project infrastructure (CVS, web page, etc.);
 +					early prototype routines.
 +Ross Johnson		rpj at callisto dot canberra dot edu dot au
 +					early prototype routines;
 +					ongoing project coordination/maintenance;
 +					implementation of spin locks and barriers;
 +					re-implemented pthread_once (version 1);
 +					various enhancements;
 +					bug fixes;
 +					documentation;
 +					testsuite.
 +Robert Colquhoun	rjc at trump dot net dot au
 +					Early bug fixes.
 +John E. Bossom		John dot Bossom at cognos dot com
 +					Contributed substantial original working implementation;
 +					bug fixes;
 +					ongoing guidance and standards interpretation.
 +Anders Norlander	anorland at hem2 dot passagen dot se
 +					Early enhancements and runtime checking for supported
 +					Win32 routines.
 +Tor Lillqvist		tml at iki dot fi
 +					General enhancements;
 +					early bug fixes to condition variables.
 +Scott Lightner		scott at curriculum dot com
 +					Bug fix.
 +Kevin Ruland		Kevin dot Ruland at anheuser-busch dot com
 +					Various bug fixes.
 +Mike Russo		miker at eai dot com
 +					Bug fix.
 +Mark E. Armstrong	avail at pacbell dot net
 +					Bug fixes.
 +Lorin Hochstein 	lmh at xiphos dot ca
 +					general bug fixes; bug fixes to condition variables.
 +Peter Slacik		Peter dot Slacik at tatramed dot sk
 +					Bug fixes.
 +Mumit Khan		khan at xraylith dot wisc dot edu
 +					Fixes to work with Mingw32.
 +Milan Gardian		mg at tatramed dot sk
 +					Bug fixes and reports/analyses of obscure problems.
 +Aurelio Medina		aureliom at crt dot com
 +					First implementation of read-write locks.
 +Graham Dumpleton	Graham dot Dumpleton at ra dot pad dot otc dot telstra dot com dot au
 +					Bug fix in condition variables.
 +Tristan Savatier	tristan at mpegtv dot com
 +					WinCE port.
 +Erik Hensema		erik at hensema dot xs4all dot nl
 +					Bug fixes.
 +Rich Peters		rpeters at micro-magic dot com
 +Todd Owen		towen at lucidcalm dot dropbear dot id dot au
 +					Bug fixes to dll loading.
 +Jason Nye		jnye at nbnet dot nb dot ca
 +					Implementation of async cancelation.
 +Fred Forester		fforest at eticomm dot net
 +Kevin D. Clark		kclark at cabletron dot com
 +David Baggett		dmb at itasoftware dot com
 +					Bug fixes.
 +Paul Redondo		paul at matchvision dot com
 +Scott McCaskill 	scott at 3dfx dot com
 +					Bug fixes.
 +Jef Gearhart		jgearhart at tpssys dot com
 +					Bug fix.
 +Arthur Kantor		akantor at bexusa dot com
 +					Mutex enhancements.
 +Steven Reddie		smr at essemer dot com dot au
 +					Bug fix.
 +Alexander Terekhov	TEREKHOV at de dot ibm dot com
 +					Re-implemented and improved read-write locks;
 +					(with Louis Thomas) re-implemented and improved
 +					condition variables;
 +					enhancements to semaphores;
 +					enhancements to mutexes;
 +					new mutex implementation in 'futex' style;
 +					system clock change handling re CV timeouts;
 +					bug fixes.
 +Thomas Pfaff		tpfaff at gmx dot net
 +					Changes to make C version usable with C++ applications;
 +					re-implemented mutex routines to avoid Win32 mutexes
 +					and TryEnterCriticalSection;
 +					procedure to fix Mingw32 thread-safety issues.
 +Franco Bez		franco dot bez at gmx dot de
 +					procedure to fix Mingw32 thread-safety issues.
 +Louis Thomas		lthomas at arbitrade dot com
 +					(with Alexander Terekhov) re-implemented and improved
 +					condition variables.
 +David Korn		dgk at research dot att dot com
 +					Ported to UWIN.
 +Phil Frisbie, Jr.	phil at hawksoft dot com
 +					Bug fix.
 +Ralf Brese		Ralf dot Brese at pdb4 dot siemens dot de
 +					Bug fix.
 +prionx at juno dot com 	prionx at juno dot com
 +					Bug fixes.
 +Max Woodbury		mtew at cds dot duke dot edu
 +					POSIX versioning conditionals;
 +					reduced namespace pollution;
 +					idea to separate routines to reduce statically
 +					linked image sizes.
 +Rob Fanner		rfanner at stonethree dot com
 +					Bug fix.
 +Michael Johnson 	michaelj at maine dot rr dot com
 +					Bug fix.
 +Nicolas Barry		boozai at yahoo dot com
 +					Bug fixes.
 +Piet van Bruggen	pietvb at newbridges dot nl
 +					Bug fix.
 +Makoto Kato		raven at oldskool dot jp
 +					AMD64 port.
 +Panagiotis E. Hadjidoukas	peh at hpclab dot ceid dot upatras dot gr
 +					Contributed the QueueUserAPCEx package which
 +					makes preemptive async cancelation possible.
 +Will Bryant		will dot bryant at ecosm dot com
 +					Borland compiler patch and makefile.
 +Anuj Goyal		anuj dot goyal at gmail dot com
 +					Port to Digital Mars compiler.
 @@ -1,30 +1,39 @@ -2005-03-14  Ross Johnson  <ross at callisto.canberra.edu.au> +2005-03-16  Ross Johnson  <ross at callisto.canberra.edu.au>
 -	* CVS (snapshot-2005-03-08-fixes): Created branch for -	back-porting fixes to snapshot 2005-03-08. -	 -	* pthread_once.c (pthread_once): Add cancellability to the -	init_routine; remove cancellability elsewhere (by disabling -	cancellability around pthread_cond_wait in particular); -	the meaning of the 'done' flag is changed but the ABI doesn't -	change as a result. +	* pthread_once.c (pthread_once): Fix faulty 'done' check; fix a +	few races involving 'done' flag setting; fix incorrect 'done' +	assignment. -	* pthread.h (PTHREAD_ONCE_INIT): Change the 'done' flag value -	representation (does not change the value - still zero (0)). +	* pthread_setcancelstate.c: Don't check for an async cancel event +	if the library is using alertable async cancel.. -	* implement.h (PTW32_ONCE_CLEAR): Defined. -	(PTW32_ONCE_DONE): Defined. -	(PTW32_ONCE_CANCELLED): Defined. +2005-03-14  Ross Johnson  <ross at callisto.canberra.edu.au>
 + +	* CVS (snapshot-2005-03-08-fixes): Created branch for
 +	back-porting fixes to snapshot 2005-03-08.
 +	
 +	* pthread_once.c (pthread_once): Add cancellability to the
 +	init_routine; remove cancellability elsewhere (by disabling
 +	cancellability around pthread_cond_wait in particular);
 +	the meaning of the 'done' flag is changed but the ABI doesn't
 +	change as a result.
 + +	* pthread.h (PTHREAD_ONCE_INIT): Change the 'done' flag value
 +	representation (does not change the value - still zero (0)).
 + +	* implement.h (PTW32_ONCE_CLEAR): Defined.
 +	(PTW32_ONCE_DONE): Defined.
 +	(PTW32_ONCE_CANCELLED): Defined.
  2005-03-08  Ross Johnson  <rpj at callisto.canberra.edu.au>
 -	* pthread_once.c (pthread_once): Redesigned to elliminate potential -	starvation problem. -	- reported by Gottlob Frege  <gottlobfrege at gmail.com> +	* pthread_once.c (pthread_once): Redesigned to elliminate potential
 +	starvation problem.
 +	- reported by Gottlob Frege  <gottlobfrege at gmail.com>
 -	* ptw32_threadDestroy.c (ptw32_threadDestroy): Implicit threads were -	not closing their Win32 thread duplicate handle. -	- reported by Dmitrii Semii <bogolt at gmail.com> +	* ptw32_threadDestroy.c (ptw32_threadDestroy): Implicit threads were
 +	not closing their Win32 thread duplicate handle.
 +	- reported by Dmitrii Semii <bogolt at gmail.com>
  2005-01-25  Ralf Kubis  <RKubis at mc.com>
 @@ -1,25 +1,65 @@ +RELEASE 1.4.0
 +-------------
 +(2005-03-16) +
 +General +------- + +Version 2.0.0 is being released and version 1.4.0 back-ports the +functionality included in that release. In future, bug fixes +will be back-ported if possible and where appropriate, however, +this will be at the maintainer's descretion. New features will +not generally be back-ported, although some may if they +provide major improvements in compatibility with the standard. + +This is intended as a courtesy to application developers, but as +time moves on, the imperative will fade. + +The package naming has changed, replacing the snapshot date with +the version number + descriptive information. E.g. this +release is "pthreads-w32-1-4-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 +Version 1.3.0
  Bug reports (fixed)
  -------------------
 -* Implicitly created threads leave Win32 handles behind after exiting. -- Dmitrii Semii +* Implicitly created threads leave Win32 handles behind after exiting.
 +- Dmitrii Semii
 -* pthread_once() starvation problem. -- Gottlob Frege +* pthread_once() starvation problem.
 +- Gottlob Frege
 -New tests ---------- +New tests
 +---------
 -* More intense testing of pthread_once(). +* More intense testing of pthread_once().
  SNAPSHOT 2005-01-25
  -------------------
 -Version 1.2.0 +Version 1.2.0
  Bug fixes
  ---------
 @@ -33,7 +73,7 @@ to not be woken when the mutex was released.  SNAPSHOT 2005-01-03
  -------------------
 -Version 1.1.0 +Version 1.1.0
  Bug fixes
  ---------
 @@ -46,7 +86,7 @@ snapshot-2004-11-03).  SNAPSHOT 2004-11-22
  -------------------
 -Version 1.0.0 +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
 @@ -108,9 +108,13 @@ CRITICAL_SECTION ptw32_spinlock_test_init_lock;  CRITICAL_SECTION ptw32_cond_list_lock;  /* - * Global lock to serialise once_control event management. + * Global condition variable and mutex for once_control management.   */ -CRITICAL_SECTION ptw32_once_event_lock; +ptw32_once_control_t ptw32_once_control = +  { +    PTHREAD_COND_INITIALIZER, +    PTHREAD_MUTEX_INITIALIZER +  };  #ifdef _UWIN  /* diff --git a/pthread_setcancelstate.c b/pthread_setcancelstate.c index 002cfe5..12fdda4 100644 --- a/pthread_setcancelstate.c +++ b/pthread_setcancelstate.c @@ -103,8 +103,10 @@ pthread_setcancelstate (int state, int *oldstate)    /*     * Check if there is a pending asynchronous cancel +   * only if we don't have alertable async cancel.     */    if (state == PTHREAD_CANCEL_ENABLE +      && (ptw32_features & PTW32_ALERTABLE_ASYNC_CANCEL) == 0        && sp->cancelType == PTHREAD_CANCEL_ASYNCHRONOUS        && WaitForSingleObject (sp->cancelEvent, 0) == WAIT_OBJECT_0)      { diff --git a/pthread_win32_attach_detach_np.c b/pthread_win32_attach_detach_np.c index 82268ec..6947080 100644 --- a/pthread_win32_attach_detach_np.c +++ b/pthread_win32_attach_detach_np.c @@ -34,7 +34,6 @@   *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA   */ -//#include "../QueueUserAPCEx/User/QueueUserAPCEx.h"  #include "pthread.h"  #include "implement.h" diff --git a/tests/ChangeLog b/tests/ChangeLog index 321adc3..edf7ded 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,10 +1,11 @@ -2005-03-12  Ross Johnson  <rpj@callisto.canberra.edu.au> +2005-03-16  Ross Johnson  <rpj@callisto.canberra.edu.au>
 +	* mutex5.c: Prevent optimiser from removing asserts.  	* once3.c: New test. -2005-03-08  Ross Johnson  <rpj@callisto.canberra.edu.au> +2005-03-08  Ross Johnson  <rpj@callisto.canberra.edu.au>
 -        * once2.c: New test. +        * once2.c: New test.
  2004-11-19  Ross Johnson  <rpj@callisto.canberra.edu.au>
 diff --git a/tests/mutex5.c b/tests/mutex5.c index a597892..a71f9d8 100644 --- a/tests/mutex5.c +++ b/tests/mutex5.c @@ -41,19 +41,23 @@  static pthread_mutexattr_t mxAttr; +/* Prevent optimiser from removing dead or obvious asserts. */ +int _optimiseFoil; +#define FOIL(x) (_optimiseFoil = x) +  int  main()  {    int mxType = -1; -  assert(PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL); -  assert(PTHREAD_MUTEX_DEFAULT != PTHREAD_MUTEX_ERRORCHECK); -  assert(PTHREAD_MUTEX_DEFAULT != PTHREAD_MUTEX_RECURSIVE); -  assert(PTHREAD_MUTEX_RECURSIVE != PTHREAD_MUTEX_ERRORCHECK); +  assert(FOIL(PTHREAD_MUTEX_DEFAULT) == PTHREAD_MUTEX_NORMAL); +  assert(FOIL(PTHREAD_MUTEX_DEFAULT) != PTHREAD_MUTEX_ERRORCHECK); +  assert(FOIL(PTHREAD_MUTEX_DEFAULT) != PTHREAD_MUTEX_RECURSIVE); +  assert(FOIL(PTHREAD_MUTEX_RECURSIVE) != PTHREAD_MUTEX_ERRORCHECK); -  assert(PTHREAD_MUTEX_NORMAL == PTHREAD_MUTEX_FAST_NP); -  assert(PTHREAD_MUTEX_RECURSIVE == PTHREAD_MUTEX_RECURSIVE_NP); -  assert(PTHREAD_MUTEX_ERRORCHECK == PTHREAD_MUTEX_ERRORCHECK_NP); +  assert(FOIL(PTHREAD_MUTEX_NORMAL) == PTHREAD_MUTEX_FAST_NP); +  assert(FOIL(PTHREAD_MUTEX_RECURSIVE) == PTHREAD_MUTEX_RECURSIVE_NP); +  assert(FOIL(PTHREAD_MUTEX_ERRORCHECK) == PTHREAD_MUTEX_ERRORCHECK_NP);    assert(pthread_mutexattr_init(&mxAttr) == 0);    assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0); diff --git a/tests/test.h b/tests/test.h index a664bb6..11498cd 100644 --- a/tests/test.h +++ b/tests/test.h @@ -109,8 +109,13 @@ char * error_string[] = {  # define ASSERT_TRACE 1  #endif +/* + * Trick to force the compiler to not optimise out dead or obvious expressions. + */ +int ptw32_assert_force = 1; +  # define assert(e) \ -   ((e) ? ((ASSERT_TRACE) ? fprintf(stderr, \ +   (ptw32_assert_force && (e) ? ((ASSERT_TRACE) ? fprintf(stderr, \                                      "Assertion succeeded: (%s), file %s, line %d\n", \  			            #e, __FILE__, (int) __LINE__), \  	                            fflush(stderr) : \ @@ -120,7 +125,7 @@ char * error_string[] = {  int assertE;  # define assert_e(e, o, r) \ -   (((assertE = e) o (r)) ? ((ASSERT_TRACE) ? fprintf(stderr, \ +   (ptw32_assert_force && ((assertE = e) o (r)) ? ((ASSERT_TRACE) ? fprintf(stderr, \                                      "Assertion succeeded: (%s), file %s, line %d\n", \  			            #e, __FILE__, (int) __LINE__), \  	                            fflush(stderr) : \ | 
