Search code examples
csignals

C write async unsafe code in signal handler


How can i run asynchrounous-unsafe code in a signal handler. I cant use a flag in my case. Could i use longjmp to jump to a different context?


Solution

  • In a signal handler you can only use a set of safe functions which in many cases is sufficient for complicated functionality started within a handler. You can check man pages for your system for 'signal-safety' or similar. Here is a pointer on the web: https://man7.org/linux/man-pages/man7/signal-safety.7.html

    pthread synchronization functions are not on the list.

    However, One of the function listed there is sem_post: https://man7.org/linux/man-pages/man3/sem_post.3.html

    sem_post() is async-signal-safe: it may be safely called within a signal handler.

    So, you can implement mutex-like synchronization using semaphores within the signal handler.