Почему malloc не является безопасным асинхронным сигналом? - PullRequest
19 голосов
/ 29 июля 2010

Почему malloc нельзя использовать в обработчиках сигналов? Что может "случиться не так"?

1 Ответ

25 голосов
/ 29 июля 2010

Обработчик сигнала может быть вызван в любое время, в том числе во время, когда выполняется другой вызов malloc. Если это произойдет, произойдет одно из двух:

  1. Ваш процесс будет заблокирован внутри обработчика сигнала, потому что malloc не сможет получить блокировку кучи.
  2. Ваш процесс испортит свою кучу, потому что malloc получает блокировку (или не думает, что она ему нужна), а затем продолжает обрабатывать кучу несогласованно, что приводит к последующему сбою. 1011 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...