This is the mail archive of the
mailing list for the pthreas-win32 project.
- To: 'Thomas Sailer' <sailer at ife dot ee dot ethz dot ch>, "Bossom, John" <John dot Bossom at Cognos dot COM>
- Subject: RE: cancelling
- From: "Bossom, John" <John dot Bossom at Cognos dot COM>
- Date: Wed, 12 Jul 2000 10:33:34 -0400
- Cc: pthreads-win32 at sourceware dot cygnus dot com
Now, originally I implemented the pthread_cancel mechanism
with Microsoft's SEH (Structured Exception Handling)
and internally the BAD DEED is being thrown using this
mechanism and being caught by the thread start routine.
You should check to see if someone changed the thread
start routine to use the C++ exception mechanism.
The drawback of SEH is that it doesn't work well
with C++ as it bypasses the C++ stack unwinding
(i.e. calling destructors).
This could be handled by using a hook function that
maps SEH into C++ exceptions and using C++ exception
handling in your mainline for your thread. You'll
have to do some reading on providing the hook in
the Microsoft documentation. (I haven't done this
but it seems like a good theory anyway ;^)
From: Thomas Sailer [mailto:firstname.lastname@example.org]
Sent: Wednesday, July 12, 2000 7:21 AM
To: Bossom, John
Subject: Re: cancelling
"Bossom, John" wrote:
> Check to see if the code base for pthread is wrapping
> an exception handler around your thread mainline
> (the original code had an internal routine called "threadStart"
> which used Microsoft's Structured Exception Handling for catching all
> exceptions raised in your thread.)
The thread I'm trying to cancel was created with pthread_create,
and internally the thread routine is started through
_pthread_threadStart, which should be fine.
The thread that tries to cancel is the initial thread, i.e.
the one that called _main.
> Now, your thread is recognizing the cancel (the exception
> hex value is human readable: BAD DEED) and should have
I thought that the constant wasn't chosen arbitrarily :))