Как определить, работает ли код в контексте обработчика сигналов?

Я только что узнал, что кто-то вызывает - из обработчика сигналов - определенно небезопасную для асинхронного сигнала функцию, которую я написал.

Итак, теперь мне любопытно: как избежать повторения этой ситуации? Я хотел бы иметь возможность легко определять, выполняется ли мой код в контексте обработчика сигналов (язык - 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. Надеюсь, это непростой ответ, иначе я почувствую себя идиотом.

11
задан AkaZecik 11 November 2018 в 01:04
поделиться