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