Обработка POSIX-сигналов: vsnprintf () и localtime_r() - безопасные функции?
Имеется в виду их использование в обработчике сигналов. Я знаю, что в списке безопасных функций из man signal для Linux RedHat их нет.
И все таки, какие есть мнения о возможности их вызывать, допустим обработчик не прерываем, тогда можно? Или можно, только для определенных участков прерываемого кода?
Обновление
Собственно сомнения в безопасности этих функций состоят в следующем:
vsnprintf ()
- используется ли в vsnprintf
пара va_start()
... va_end()
и если да, то используют ли va_start()
... va_end()
неатомарные действия с нелокальными структурами данных?
Если на любой из этих вопросов ответ отрицательный, то vsnprintf()
безопасна (в предположении, что она запрограммирована без malloc()
).
localtime_r ()
- откуда она берет timezone ?
Если не из файлов (а откуда ?), то безопасна.
Заранее благодарен за комментарии.
Ответы - Обработка POSIX-сигналов: vsnprintf () и localtime_r() - безопасные функции? / Обработка POSIX-сигналов: vsnprintf () и localtime_r() - безопасные функции?

29.01.2011 12:28:24
Если нет уверенности, то лучше не рискуйте. Если есть возможность, то лучше делайте работу с "опасными" функциями в другом потоке, а обработчик сигналов пусть просто "пинает" этот поток и конфигурит необходимые параметры.
UPD:
Также посмотрите на следующее:
https://stackoverflow.com/questions/916056/master-worker-threads-and-signal-handling
http://www.cognitus.net/html/howto/pthreadSemiFAQ_8.html
UPD 2: Ответ на дополнительные рассуждения автора вопроса
Слишком много предположений. Нельзя полагаться на такие вещи. Сегодня вы возможно "проскочите", но никто не гаратирует, что завтра кто-нибудь не "оптимизирует" vsnprintf и она вдруг не перестанет быть безопасной. Если спецификация не гарантирует её безопасность, то считаем её опасной. Любые догадки или даже раскопки её реализации ничего не гарантируют.