There are several approaches when handling signals and interrupts in a program that uses ECL. One is to install your own signal handlers. This is perfectly fine, but you should respect the same restrictions as ECL. Namely, you may not execute arbitrary code from those signal handlers, and in particular it will not always be safe to execute Common Lisp code from there.
If you want to use your own signal handlers then you should set the
appropriate options before invoking cl_boot()
, as
explained in ecl_set_option
. Note that in this
case ECL will not always be able to detect floating point exceptions,
specially if your compiler does not support C99 and the corresponding
floating point flags.
The other option is to let ECL handle signals itself. This would be
safer when the dominant part of the code is Common Lisp, but you may need
to protect the code that embeds ECL from being interrupted using either
the macros ecl_disable_interrupts
and ecl_enable_interrupts
or the POSIX functions
pthread_sigmaks
and
sigprocmask
.