Subject: Re: ksh lossage on sparc64
To: matthew green <mrg@eterna.com.au>
From: Martin Husemann <martin@duskware.de>
List: tech-toolchain
Date: 11/20/2000 15:59:10
> this happens with other ports? how is the ksh source broken? i don't see
> why it needs the volatile casts anyway...
I suppose it happens for any ports where gcc has enough registers to hold
the last value for j->state. This value is changed inside the SIGCHLD
handler, and this is the loop that needs to terminate after that handler
is done.
What now happens on sparc64 is: the sigchld function modifies the struct
pointed to by "j" in this loop, returns, thus waking up the sigsuspend a
few lines below, continues to the "while" check and still has the old value
of j->state in a register, checks against that and continues the loop one
more time - thus blocking in "sigsuspend" again.
Martin