Вызов несуществующего обработчика сигнала signal() в системе Windows вызывает состояние гонки
Этот дефект возникает при вызове функции signal() от обработчика сигналов на платформах Windows ®.
Дефект обнаруживается только при указании компилятора Visual Studio. Посмотрите Compiler (-compiler).
Функция signal() связывает сигнал с функцией обработчика сигнала. На таких платформах, как Windows, которая удаляет эту связь после получения сигнала, можно вызвать функцию signal() снова в обработчике сигнала для восстановления связи.
Однако эта попытка сделать обработчик сигнала постоянным склонна к условиям гонки. На платформах Windows с момента начала выполнения обработчика сигнала до момента signal функция вызывается снова, это обработка сигнала по умолчанию, SIG_DFL, это активно. Если второй сигнал принимается в течение этого временного окна, вы видите обработку сигнала по умолчанию, а не пользовательский обработчик сигнала, но вы можете ожидать иначе.
Не звонить signal() от обработчика сигналов на платформах Windows.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки:
SIG_HANDLER_CALLING_SIGNAL
|
| Воздействие: среднее |
| CWE ID: 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