[MLton] interrupted system call
   
    Matthew Fluet
     
    fluet@cs.cornell.edu
       
    Fri, 26 Mar 2004 09:33:34 -0500 (EST)
    
    
  
> > > Because if you block all signals, you're beholden to unblock all signals
> > > when the ML signal handler gets a chance to run.
> >
> > No.  You can save the mask and then restore it.
> >
> >  let
> >     val m = Signal.Mask.getBlocked ()     (* not there yet *)
> >     val () = Signal.Mask.block Signal.mask.all
> >  in
> >     dynamicWind (fn () => call raiseSys,
> >                  fn () => Signal.Mask.setBlocked m)
> >  end
One more revision -- we shouldn't block signals that aren't being handled
by the ML signal handler.  For example, if the programmer installs a
signal handler for SIGALRM but not for SIGNINT, then I still want C-C to
kill the process.