Index
Home
About
Blog
Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: BUG (non-kernel), can hurt developers.
Original-Message-ID: <Pine.LNX.4.58.0311261021400.1524@home.osdl.org>
Date: Wed, 26 Nov 2003 18:31:27 GMT
Message-ID: <fa.j4rspt8.1fi8l8o@ifi.uio.no>
On Wed, 26 Nov 2003, Richard B. Johnson wrote:
>
> Note to hackers. Even though this is a lib-c bug
It's not.
It's a bug in your program.
You can't just randomly use library functions in signal handlers. You can
only use a very specific "signal-safe" set.
POSIX lists that set in 3.3.1.3 (3f), and says
"All POSIX.1 functions not in the preceding table and all
functions defined in the C standard {2} not stated to be callable
from a signal-catching function are considered to be /unsafe/
with respect to signals. .."
typos mine.
The thing is, they have internal state that makes then non-reentrant (and
note that even the re-entrant ones might not be signal-safe, since they
may have deadlock issues: being thread-safe is _not_ the same as being
signal-safe).
In other words, if you want to do complex things from signals, you should
really just set a flag (of type "sigatomic_t") and have your main loop do
them. Or you have to be very very careful and only use stuff that is
defined to be signal-safe (mainly core system calls - stuff like <stdio.h>
is right out).
Linus
Index
Home
About
Blog