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>