This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Cancelling threads and C++ (LinuxThreads)
- To: libc-alpha at sourceware dot cygnus dot com
- Subject: Cancelling threads and C++ (LinuxThreads)
- From: george at moberg dot com
- Date: Mon, 28 Jun 1999 10:03:20 -0400 (EDT)
- Cc: egcs at egcs dot cygnus dot com
- Organization: Moberg Research, Inc.
- Reply-To: george at moberg dot com
I've been working on a medium-sized C++ program that uses pthreads and runs on
Linux. FYI: I'm running Linux kernel 2.2.10ac3 and glibc 2.0.7 that came on
the Mandrake CD set on an x86 system.
The issue that I have to bring to attention is cancellation of threads in the
presence of a C++ program in deferred cancellation mode. When a thread is
cancelled, the destructors for stack-based objects are not called.
I've got a work-around, and a request for future versions of glibc/LinuxThreads.
First, the work-around:
At the start of the thread function, I push a cancellation handler
which throws an exception. This exception is caught in the top-level
of the thread function, and the catch() clause calls
pthread_exit(PTHREAD_CANCELLED).
To make this work right, I had to recompile glibc with -fexceptions.
I'm using egcs 1.1.2 to do this.
This work-around works. However, I've corresponded with Dave Butenhof, who
wrote "Programming with POSIX Threads". His opinion was that this solution
isn't portable, and that the library implementing pthreads should see to it
that destructors for stack-based objects are called without my program having
to do anything special.
So, my question(s) would be:
Is a patch to LinuxThreads to implement the throw/catch mechanism
for cancelling threads appropriate? This would include the -fexceptions
compile option for the entire C library.
I could probably supply a patch if I played around with this long
enough. Is it appropriate to include C++ code in the C library?
Is a patch like this in the works already, or implemented in a version
that I don't have yet?
Would this require that a single mechanism for exceptions be used,
rather than the two that are available in egcs now? (-fnew-exceptions
vs. -fsjlj-exceptions)
Thank you for your time.
---
George T. Talbot
<george@moberg.com>