Subject: Re: bug#23912: 25.0.95; Abort in gc when working with streams

From: Eli Zaretskii <[email-masked]>
Date: Wed, 13 Jul 2016 23:16:12 +0300

> From: Michael Heerdegen <[email-masked]>
> Cc: [email-masked]
> Date: Tue, 12 Jul 2016 23:53:31 +0200
> 
> #0  0x00007ffff1930c19 in raise () from /lib/x86_64-linux-gnu/libpthread.so.0
> #1  0x000000000054d2fe in terminate_due_to_signal (sig=6, backtrace_limit=40) at emacs.c:381
> #2  0x00000000005715d9 in emacs_abort () at sysdep.c:2247
> #3  0x00000000005c9c1d in garbage_collect_1 (end=0x7fffffff5868) at alloc.c:5662
> #4  0x00000000005ca55d in Fgarbage_collect () at alloc.c:5979
> #5  0x000000000054afbc in maybe_gc () at lisp.h:4654

I don't understand how this could have happened.  The only place that
sets abort_on_gc true is prin1-to-string, but it is not in the
backtrace.  So somehow that setting was not reset at the end of
prin1-to-string, and it looks like the only way that could have
happened is if some code triggered by prin1-to-string set
throw-on-input or called while-no-input.  Is this likely to have
happened during what you did?

Does anyone know/remember why we cannot allow GC during
prin1-to-string?  I'm not sure I understand why we do that, and the
comments don't help.