This is the mail archive of the pthreads-win32@sources.redhat.com mailing list for the pthreas-win32 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: cancelling


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 ;^)

John.

-----Original Message-----
From: Thomas Sailer [mailto:sailer@ife.ee.ethz.ch]
Sent: Wednesday, July 12, 2000 7:21 AM
To: Bossom, John
Cc: pthreads-win32@sourceware.cygnus.com
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 :))

Tom

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]