Почему нельзя использовать malloc в обработчиках сигналов? Что может произойти неправильно?
Почему malloc не поддерживает асинхронный сигнал?
Ответ 1
Обработчик сигналов можно вызывать в любое время, в том числе во время выполнения другого вызова malloc
. Если это произойдет, произойдет одна из двух вещей:
- Ваш процесс будет блокироваться внутри обработчика сигнала, потому что
malloc
не сможет получить блокировку кучи. - Ваш процесс испортит его кучу, потому что
malloc
получает блокировку (или не думает, что ей это нужно), а затем переходит к тому, чтобы сделать кучу непоследовательной, что приведет к последующему сбою.