[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#33034: `unwind-protect' cleanup form is not executed if body dies in
From: |
Paul Pogonyshev |
Subject: |
bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow |
Date: |
Sat, 13 Oct 2018 12:52:13 +0200 |
I haven't looked into the source code, but it seems that these
examples don't involve C-level stack overflow. I tried setting
`attempt-stack-overflow-recovery' to nil and re-evaluated the examples
with exactly the same results: cleanup forms are not executed, but
Emacs doesn't crash. Looks like stack that is overflown here is only
Lisp-level. Besides, it's hard to imagine that `max-specpdl-size' or
`max-lisp-eval-depth' somehow affect C-level stack.
On Sat, 13 Oct 2018 at 12:45, Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Paul Pogonyshev <pogonyshev@gmail.com>
> > Date: Sat, 13 Oct 2018 12:35:46 +0200
> > Cc: 33034@debbugs.gnu.org
> >
> > I see. Wonderful approach.
>
> If you have ideas for better approaches, I'm sure they will be
> welcome.
>
> C stack overflow results in SIGSEGV; the current code attempts
> recovery by using OS-dependent techniques that analyze the data
> provided by the segfault to detect when it's a stack overflow, and if
> so, do the moral equivalent of (throw 'top-level), bypassing any
> possible unwind forms, because evaluating those forms when there is no
> available stack space might very well trigger another, nested
> segfault.
>
> It's a hard problem, and the only justification for it is to give
> users some imperfect chance of saving their edits.
>
> Some people think we shouldn't even attempt to recover from such
> calamities, and instead just crash, which is why we have the
> attempt-stack-overflow-recovery variable to let those people have what
> they want.
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Paul Pogonyshev, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Eli Zaretskii, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Paul Pogonyshev, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Eli Zaretskii, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow,
Paul Pogonyshev <=
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Eli Zaretskii, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Eli Zaretskii, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Paul Pogonyshev, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Eli Zaretskii, 2018/10/13
- bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Paul Pogonyshev, 2018/10/13
bug#33034: `unwind-protect' cleanup form is not executed if body dies in stack overflow, Paul Eggert, 2018/10/14