Subject: bug#43700: 28.0.50; Crash creating a second frame

From: Eli Zaretskii <[email-masked]>
Date: Sat, 03 Oct 2020 11:16:18 +0300

> Cc: [email-masked]
> From: Andy Moreton <[email-masked]>
> Date: Sat, 3 Oct 2020 00:07:11 +0100
> 
> > So the next question is: how come the default face is not available?
> > When that breakpoint breaks, what is the value of
> > 
> >     FRAME_FACE_CACHE (f)->used
> > 
> > Is it zero, per chance?  If so, I'd be interested to understand which
> > code resets the frame's face cache in this recipe.
> 
> Yes: let me know what else you would like to look at.

OK.  x-create-frame in w32fns.c initializes the basic faces of the
frame, here:

  /* Init faces first since we need the frame's column width/line
     height in various occasions.  */
  init_frame_faces (f);

I suggest to put a breakpoint after that function returns, and when it
breaks for the second frame you are creating, put a watchpoint on the
frame's face cache, like this:

  (gdb) watch -l f->face_cache->used if f->face_cache->used == 0

Then produce a backtrace from any time this watchpoint fires.  That
should show us the culprit.

Thanks.