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