I didn't know that disable_sigint existed. I'll experiment with it today.

 -- John

On Oct 22, 2014, at 9:09 AM, Steven G. Johnson <[email protected]> wrote:

> Couldn't you use InterruptExceptions here (ctrl-c handlers), disabling sigint 
> during the loop body so that the exception only occurs when you are ready?
> 
> for i in iterations
>    try
>       disable_sigint() do
>             ....do an iteration....
>       end
>    catch e
>       if isa(e, InterruptException)
>            ...exit gracefully....
>       else
>          rethrow(e)
>       end
>    end
> end
> 
> ?   This kind of thing has a chance to work in an environment like IJulia 
> too, whereas reading stdin will never work in a browser interface.
> 
> Unfortunately, the above code may still have a race condition: if the user 
> hits ctrl-c and the SIGINT signal is received in the loop body but before 
> try...end then it won't be caught by the catch bock.   One way to hack around 
> this would be to put the disable_sigint() outside the loop, and then check 
> the C global jl_signal_pending != 0 inside the loop body to see if a SIGINT 
> was received (but not handled yet).

Reply via email to