Неперсистентный обработчик сигнала, вызывающий signal()
в системе Windows вызывает условие гонки
Этот дефект возникает при вызове функции signal()
от обработчика сигналов в Windows® платформы.
Дефект обнаруживается только при указании компилятора Visual Studio. См. Compiler (-compiler)
.
Функция signal()
связывает сигнал с функцией обработчика сигнала. На таких платформах, как Windows, которая удаляет эту ассоциацию после получения сигнала, можно вызвать функцию signal()
снова внутри обработчика сигнала, чтобы восстановить связь.
Тем не менее, эта попытка сделать обработчик сигнала постоянным, подвержена гоночным условиям. На платформах Windows, от времени, когда обработчик сигнала начинает выполняться, до когда signal
функция вызывается снова, это обработка сигнала по умолчанию, SIG_DFL
, что активно. Если второй сигнал принимается в этом временном окне, вы видите обработку сигнала по умолчанию, а не пользовательский обработчик сигнала, но вы можете ожидать другого.
Не вызывайте signal()
от обработчика сигналов на платформах Windows.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: SIG_HANDLER_CALLING_SIGNAL
|
Влияние: Средний |
ИДЕНТИФИКАТОР CWE : 387, 474 |
Find defects (-checkers)
| Function called from signal handler not asynchronous-safe
| Return from computational exception signal handler
| Shared data access within signal handler