Marcin is right. We must be very cautious, what a signal handler does.The list in the sigaction manpage is nice finding. Thank you! In screen it prooved to be fatal, if a signal handler does malloc()/free(). That easily leads to invalid pointers in the rest of the code.
take care,
Jürgen-
Follow-up Comment #12, bug #25089 (project screen):
The reason for this is that in the C language only some very narrow set of
library functions can be invoked from the signal handler
FreeBSD sigaction(2) manpage lists them and adds:
https://www.freebsd.org/cgi/man.cgi?query=sigaction&apropos=0&sektion=2&manpath=FreeBSD+12.1-RELEASE+and+Ports&arch=default&format=html
> All functions not in the above lists are considered to be unsafe with
> respect to signals. That is to say, the behaviour of such functions is
> undefined when they are called from a signal handler that interrupted an
> unsafe function. In general though, signal handlers should do little
> more than set a flag; most other actions are not safe.
Therefore it was the best practice in the signal handlers only to set the
variable and deal with the actual handling later.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?25089>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/