Нестойкий обработчик сигнала, вызывая 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