There's very few things you can safely do in a signal handler. Calling a
julia function can potentially lead to code generation, GC, etc., all of
which is bad news in a signal handler. That's why we need a first-class
mechanism for this: install a Julia function as a handler and the system
arranges for your function to be called when the interrupt happens, but
safely.


On Tue, Jun 17, 2014 at 11:21 AM, Stephen Chisholm <sbchish...@gmail.com>
wrote:

> I like the idea of an interrupt handling mechanism.  What do you see that
> would make the signal/libc approach unreliable?
>
>
> On Tuesday, 17 June 2014 12:18:11 UTC-3, Stefan Karpinski wrote:
>
>> That is very unlikely to be reliable, but it's cool that it works. I
>> think that we probably should change SIGINT from raising a normal error to
>> triggering some kind of interrupt handling mechanism (which can in turn
>> raise an error by default).
>>
>>
>> On Tue, Jun 17, 2014 at 10:41 AM, Stephen Chisholm <sbchi...@gmail.com>
>> wrote:
>>
>>> I'm able to register a callback function using signal in libc, see the
>>> code below.
>>>
>>> SIGINT=2
>>>
>>> function catch_function(x)
>>>     println("caught signal $x")
>>>     exit(0)::Nothing
>>> end
>>> catch_function_c = cfunction(catch_function, None, (Int64,))
>>> ccall((:signal, "libc"), Void, (Int64, Ptr{Void}), SIGINT,
>>> catch_function_c)
>>>
>>> while true
>>>      sleep(1)
>>> end
>>>
>>>
>>>
>>> On Tuesday, 17 June 2014 09:24:43 UTC-3, Stephen Chisholm wrote:
>>>>
>>>> I'm able to catch the InterruptException with the code below when
>>>> running in the REPL, but it doesn't seem to get thrown when running the
>>>> code in a script.
>>>>
>>>> while true
>>>>     try sleep(1)
>>>>         println("running...")
>>>>     catch err
>>>>         println("error: $err")
>>>>     end
>>>> end
>>>>
>>>>
>>>> On Monday, 16 June 2014 18:30:36 UTC-3, Ivar Nesje wrote:
>>>>>
>>>>> SIGINT gets converted to a InterruptException, that can be caught in a
>>>>> catch statement. If you happened to be in a ccall, you might cause your
>>>>> program to be in a corrupt state and leak resources such as memory.
>>>>>
>>>>> I'm not sure how you can interact with other signals.
>>>>>
>>>>
>>

Reply via email to