GNU bug report logs -
#33014
26.1.50; 27.0.50; Fatal error after re-evaluating a thread's function
Previous Next
Reported by: Gemini Lasswell <gazally <at> runbox.com>
Date: Thu, 11 Oct 2018 05:32:01 UTC
Severity: normal
Tags: fixed
Found in version 26.1.50
Fixed in version 27.1
Done: Gemini Lasswell <gazally <at> runbox.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
> From: Andreas Schwab <schwab <at> linux-m68k.org>
> Cc: Gemini Lasswell <gazally <at> runbox.com>, 33014 <at> debbugs.gnu.org
> Date: Sun, 14 Oct 2018 21:46:35 +0200
>
> Do we actually mark the registers of the threads as gc roots?
According to my reading of the code, we do. Each time a running
thread is about to release the global lock, we call
flush_stack_call_func, which is supposed to flush relevant registers
to the stack of that thread. And mark_one_thread marks the stack of
each thread, so it should be able to see the Lisp objects on that
stack.
In this case, the function whose bytecode seems to be GC'ed is the
thread function itself. That function is also marked, as part of
marking the thread object itself, although, of course, re-evaluating
the function will redefine the function. But, if my reading of
exec_byte_code is correct, the bytecode should be on the stack and in
registers while we execute it, so even though the bytecode gets
disconnected from the function, it is still reachable from the stack,
and should have been marked...
Could this be some bug in the implementation of __builtin_unwind_init
etc., which causes it not to save some registers under some
conditions? Gemini, what version of the compiler are you using?
This bug report was last modified 6 years and 197 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.