Я только узнал, что кто-то звонит - из обработчика сигнала - определенно не асинхронно-сигнальная функция, которую я написал. И, конечно же, я получаю вину (несмотря на предупреждения в моей документации). (Тот же кодер вызывает всевозможные функции, не содержащие асинхронного сигнала, из своего обработчика сигнала. Вздох.)
Итак, теперь мне любопытно: как обходить эту ситуацию от повторения? Я хотел бы иметь возможность легко определить, работает ли мой код в контексте обработчика сигнала (язык C, но не применимо ли решение к любому языку?):
int myfunc( void ) {
if( in_signal_handler_context() ) { return(-1) }
// rest of function goes here
return( 0 );
}
Это под Linux. Надеюсь, это нелегкий ответ, иначе я буду чувствовать себя идиотом.