Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Jan 2000 21:54:10 +0100 (CET)
From:      Oliver Fromme <olli@dorifer.heim3.tu-clausthal.de>
To:        freebsd-questions@FreeBSD.ORG
Subject:   Re: Giving a sighandler more information
Message-ID:  <200001122054.VAA52051@dorifer.heim3.tu-clausthal.de>
In-Reply-To: <85gfv4$2ueb$1@atlantis.rz.tu-clausthal.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Laurence Berland <stuyman@confusion.net> wrote in list.freebsd-questions:
 > Oliver Fromme wrote:
 >> Seriously.  You _must_ declare global variables which are
 >> accessed from a signal handler as ``volatile sig_atomic_t''.
 >> Everything else is _not_ guaranteed to work (and if it works,
 >> then it's just pure luck).
 > 
 > Does this have something to do with the signal being caught while we're
 > in the signal routine?  Am I on the right track?

No.  The problem is that a signal handler can be called at
any time, basically, even in the midst of a memory access
(depending on the platform).  The standard guarantees that
accesses to variables of type "sig_atomic_t" are always
atomic (hence the name), i.e. they cannot be interrupted
by a signal handler.

The "volatile" qualifier makes sure that the compiler does
not try certain optimizations on these variables, such as
caching them in registers (which could also break signal
handlers, because the contents of the actual variable might
be incorrect if it's cached).

Regards
   Oliver

-- 
Oliver Fromme, Leibnizstr. 18/61, 38678 Clausthal, Germany
(Info: finger userinfo:olli@dorifer.heim3.tu-clausthal.de)

"In jedem Stück Kohle wartet ein Diamant auf seine Geburt"
                                         (Terry Pratchett)


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001122054.VAA52051>