This is the mail archive of the
pthreads-win32@sources.redhat.com
mailing list for the pthreas-win32 project.
Re: pthreads VCE: problem with destructor
- From: Thomas Pfaff <tpfaff at gmx dot net>
- To: TEREKHOV at de dot ibm dot com
- Cc: pthreads-win32 at sources dot redhat dot com
- Date: Thu, 20 Dec 2001 13:40:28 +0100 (GST)
- Subject: Re: pthreads VCE: problem with destructor
> > This is exactly the reason why i have created the
> > setjmp/longjmp version.
>
> I am really puzzled. Since there is no standard
> PTHREAD C++ bindings that would guarantee things
> such as C++ tack unwinding on thread exit/
> cancellation, any C++ threaded written to exploit
> such things is NOT truly portable. However, there
> is practically no way to make thread cancellation/
> exit work in C++ programs using setjmp/longjmp
> because the C++ standard restricts the LEGAL
> usage of longjmp in *C++* programs:
>
> ISO/IEC 14882:1998(E), Pg 347:
>
> "The function signature longjmp(jmp_buf jbuf, int val)
> has more restricted behavior in this International
> Standard. If any automatic objects would be destroyed
> by a thrown exception transferring control to another
> (destination) point in the program, then a call to
> longjmp( jbuf, val) at the throw point that transfers
> control to the same (destination) point has
> undefined behavior."
> ^^^^^^^^^^^^^^^^^^
>
> regards,
> alexander.
Please do not take my comments out of the context. The original text was
*****
> Regardless as Mr. Bossom so well has already stated: I certainly
> wouldn't
> depend on pthread_exit() or pthread_cancel() allowing destructors to run
> to be
> portable though. Since the primary purpose of this library is to
> enhance
> portability of programs using pthreads, counting on pthread_exit() or
> pthread_cancel() to work in a non-portable way seems self-defeating.
This is exactly the reason why i have created the setjmp/longjmp version.
There may be bugs in it but i think they could be discovered if more would
using it.
*****
I do not wanted the destructors to be run because this is nonportable.
Before the setjmp/longjmp code the only working implementation for
mingw32 was the c++ one that i disliked.