Marius Vollmer <[EMAIL PROTECTED]> writes:

> Guile is in a loop, calling take_signal, marking the signal_async, and
> then returning from the signal handler only to get the sig11 again,
> without making any progress.
> 
> I don't know enough about Unix signals, and much less about how Guile
> handles Unix signals, to know what to do about this.  I don't think
> that Guile has always behaved in this way, but I can't say for sure.
> 
> I think that Guile should not return from its signal handler for
> non-continueable signals, like SIGSEGV, SIGILL and SIGBUS.  It should
> directly throw to wherever is appropriate.

Marked asyncs are not handled until SCM_ASYNC_TICK is performed.
Previously, it was performed at each *ALLOW_INTS.

As a preparation for POSIX threading, I made this change:

2000-03-13  Mikael Djurfeldt  <[EMAIL PROTECTED]>

        * __scm.h (SCM_ALLOW_INTS, SCM_REALLOW_INTS): Removed call to
        SCM_ASYNC_TICK.  (This is a preparation for POSIX threads support,
        and kind of an experiment: Will this cause problems?)

Probably, the change in behaviour we see is that, earlier, the signal
was actually handled by an SCM_ASYNC_TICK before take_signal is called
again.  (Since I'm now visiting MIT, I have no time looking into the
details of this, however.)

The solution you suggest (non-continuable signals) seems good.

Reply via email to