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