SIGALRM, SIGVTALRM, and third party libraries

Simon Marlow marlowsd at gmail.com
Thu Sep 9 04:31:45 EDT 2010


On 08/09/2010 15:57, Edward Z. Yang wrote:
> Excerpts from Simon Marlow's message of Wed Sep 08 03:40:42 -0400 2010:
>> Maybe.  As a first step I think we could just document what happens when
>> a call is interrupted (pthread_cancel() on POSIX, ??? on Windows) and
>> let the user handle it.  Is there even a good lowest-common-denominator
>> that we can build an API on top of?
>
> I've been thinking carefully about this, and I kind of suspect one-size
> fits all won't work here.  I've done a writeup here; one of the problems
> with moving pthread_cancel to Windows is that its semantics are so complicated.
>
>      http://blog.ezyang.com/2010/09/pthread-cancel-on-window/

I don't think porting pthreads to Windows is the right way to handle 
this anyway, Windows programmers want to use Windows APIs.

I suggest that we use CancelSynchronousIO if it is available, and 
otherwise do nothing (this means a dynamic binding which is a bit 
fiddly, but I think we already do this elsewhere).  TerminateThread is 
out of the question, because it provides no way to block it or clean up. 
  CancelSynchronousIO will let us interrupt threads blocked on I/O on 
Windows, which we can't currently do, and it works for both bound and 
unbound threads.

On POSIX we can pthread_kill() bound threads.  This will let us handle 
at least one important case I can think of: waitForProcess.  We just 
have to find an appropriate signal to use - we can't use SIGVTALRM, 
because it is already set to SA_RESTART.

Cheers,
	Simon


More information about the Glasgow-haskell-users mailing list