[Mono-list] solution for Thread::Abort()

Dietmar Maurer dietmar@ximian.com
08 Aug 2002 17:25:51 +0200


One solution to implement Thread::Abort() would be to use pthreds_kill()
to raise a signal in thread to abort. The signal handler of that thread
can then impl. the Abort() functionality (realy abort - or catch the
exception (ResetAbort)).

(Un)fortunately there are no signals on windows, and it is not possible
to do things like pthreds_kill() - at least I don't know how.

Patrik pointed me to a possible solution on:

        1. Suspend the Thread: SuspendThread ();
        2. get the thread context: GetThreadContext();
        3. modify the IP in the context, we can also store argumnets we
           want to pass in the context (in other registers). 
        4. set the thread context: SetThreadContext();
        5. resume the thread: ResumeThread();

After ResumeThread() that thread jumps to the modified IP, which is a
special exception handler. That handler can simple call
arch_handle_exception to do the work. We just need to implement those
function in io-layer, then we can use the same code on unix.

The question is if its possible to implement a pthread based
ResumeThread() function which uses a modified context?

- Dietmar