QA@IT

putenvってsignal handlerから呼べる?

3859 PV

putenv(3) の manpage を見ると putenvは reentrant って書いてあるけど、それってつまりputenvはsignal handlerからでも呼べる?

回答

呼べない。putenvは内部でmalloc()を使っているし、libc lockもとる。たいへん紛らわしいことにこのページでreentrantという単語は thread safe という意味で使われている。

また、さらに紛らわしいことに、ここでの thread safetyには隠れた条件があり、それは別スレッドがgetenv()を使っていないことである。つまり別スレッドがmalloc等内部的にgetenv()する関数を使っていると遠慮無くクラッシュする

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。