Why only async-safe functions should be called from a signal handler?

前端 未结 1 1691
南方客
南方客 2020-12-22 01:27

I understand that, from a signal handler function sigaction() I should only call those functions that are \"async-safe\". But why is so?

相关标签:
1条回答
  • 2020-12-22 02:01

    Calling an unsafe function may lead to undefined behavior.

    The Open Group Base Specifications Issue 7 (POSIX.1-2008), in its treatment of "Signal Concepts", says:

    [W]hen a signal interrupts an unsafe function ... and the signal-catching function calls an unsafe function, the behavior is undefined.

    As to why unsafe functions are unsafe, there may be many reasons in a given implementation.

    However, a previous version of the standard, Issue 6 (POSIX.1-2004), hints at one possible reason on some implementations. That version describes async-signal-safe functions as "either reentrant or non-interruptible by signals". So, consider a function which relies on static data to keep state but is interrupted by itself midway through its execution — can that data be trusted once control returns to the interrupted function?

    0 讨论(0)
提交回复
热议问题