On Mon, Jan 10, 2011 at 11:31 PM, Andres Valloud < [email protected]> wrote:
> Indeed, quite right. I happened to add a flag to turn off the heartbeat >> so I could debug the crash Matthew was seeing in starting up >> Squeak4.2-10856-beta.image (since single-stepping through machine code >> always gets interrupted by the heartbeat, it being an interval timer) >> and lo and behold the bug went away. This is very worrying because it >> appears to imply that there's a serious bug in the linux kernel/gcc >> since delivering a software interrupt shouldn't corrupt registers, but >> it clearly does. I'll try and pass it by someone who's an expert in >> this area. >> > > Or the signal handler functions do not comply with the relevant > specifications, e.g.: signal handlers that do not preserve the value of > errno, signal handlers that use a function not in the list of approved safe > functions you can call from a signal handler as per the Single Unix > Specification, etc... > Good point. The signal handler essentially calls gettimeofday (not on the approved list but time is) and sets a couple of variables (current 64-bit microsecond time, stackLimit). But it does not preserve errno. I don't want to avoid calling gettimeofday and can see no harm in it; it's equivalent internally to time providing it doesn't use its TIMEZONE arg (which it doesn't). But the signal handler /doesn't/ preserve errno and doing so is a very good idea and easy to do. Thanks. > Andres. > >
