[ removed some CCs -- why was this on -review anyway? ]
Jan Vroonhof <vroonhof(a)math.ethz.ch> writes:
Ben Wing <ben(a)666.com> writes:
> Looking at unbind_to_hairy(), I think I see a logic error. If so, it's
> amazing we are able to run ok at all.
There are other people seeing very weird crashes involving very deep
traces (see for instance the eudc thread).
P.S. Most of these crashes involve deep levels of bytecode execution.
I am wondering whether this (or a related) change triggered it.
1999-01-30 Martin Buchholz <martin(a)xemacs.org>
* bytecode.c (funcall_compiled_function): Call
UNBIND_TO_GCPRO instead of UNBIND_TO_GCPRO_VARIABLES_ONLY.
No, this patch should be really save. It only undid one of Martin's
optimisations :-)
Maybe I am misreading the code but I think the ++specpdl_ stuff in
unbind_to_hairy() is necessary because it is called from the
UNBIND_TO* macros.
my interpretation of the code is:
- the UNBIND_TO* macros handle the normal variable case.
- unbind_to_hairy() is basically the old (pre-marzilla patch)
unbind_to()
- in UNBIND_TO* we first decrement the specpdl counters and then only
if we are not dealing with a normal variable call
unbind_to_hairy(). The first thing unbind_to_hairy() has to do is to
undo the decrement done in the macro.
Martin, I'd suggest to move the increments into the macros to make
this more obvious.
Ben, am I missing something here? What did you mean by 'logic error'?
Gunnar