Subject: bug#50571: 28.0.50; Redisplay segfaults with empty face cache

From: Eli Zaretskii <[email-masked]>
Date: Tue, 14 Sep 2021 16:03:02 +0300

> From: "Basil L. Contovounesios" <[email-masked]>
> Cc: [email-masked]
> Date: Tue, 14 Sep 2021 00:21:17 +0100
> 
> In any case, I was able to manually continue execution until
> init_iterator was dealing with the desired frame.  If you know of a way
> to streamline this, please let me know.

I usually define the watchpoint only when I'm in the right
frame/window.

> Note that, at the time that I issue 'bt full' in the attached log, the
> single visible *scratch* frame has the following in the echo area:
> 
>   Error during bug-reference-auto-setup: (no-catch sucess t)
> 
> So there's an uncaught signal (presumably due to a typo) in the mix too.

Thanks, I see the reason now.  It's because we allow to have arbitrary
Lisp to be registered in jit-lock-functions, and then that arbitrary
Lisp is called in the middle of redisplay, and in this case creates a
whole new frame with faces.  As luck would have it, we decide right
there and then perform routine maintenance and release all the faces
on all the frames...

I'm thinking about the best solution for this.