Mail Archives: cygwin-developers/2001/05/07/13:52:55
Christopher Faylor wrote:
>
> It only took two days or so for me to realize that my stack walking code
> was screwed up. The way signals work is that cygwin routines register
> their frame pointers on entry. If a signal occurs, then the location on
> the stack which has the return address is replaced with a call to a
> signal handler prefix which resets a "signal_arrived" event and calls
> any appropriate signal handler.
>
> I'd changed things so that the call to the signal handler prefix was
> being put on the caller of the function's return rather than the
> functions return. So, the signal_arrived event was never being reset.
> This caused a WaitForMultipleObjects in select() to be continually
> triggered.
>
> I have had this problem so many times that I'm embarrassed that it took
> two days for me to figure out what the problem was. This was due to my
> changes to the stack dump stuff in cygwin. It uses the same code to
> walk the stack as the signal handler. So, when I made the stack dumper
> work better for exceptions, I broke the signal handler.
>
> Exceptions are strange because, while they set up something that looks
> like a frame pointer on the stack, it isn't a true frame pointer, so you
> have to make allowances. You don't have to make those allowances for
> the signal handler.
>
> After seeing this problem, I have another idea on how to handle signals.
> It could be a cleaner implementation but now that the current version
> isn't broke, I'm a little reluctant to fix it. Maybe in 1.3.4...
>
Just a note that this also fixed a problem of rxvt not ending when bash
logged out.
Earnie.
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
- Raw text -