Subject: bug#21394: 25.0.50; Segfault when displaying unprintable character in echo area while frames are being created

From: Eli Zaretskii <[email-masked]>
Date: Tue, 01 Sep 2015 19:57:19 +0300

> Date: Tue, 1 Sep 2015 16:43:13 +0000
> From: Pip Cet <[email-masked]>
> 
> Launch emacs -Q.
> 
> C-x C-f emacs-bug-038.el
> M-x eval-buffer
> 
> Wait for approximately one minute.

I waited for 1.5 minutes, and saw no crash.  But that doesn't surprise
me, since these problems are very elusive.

> 26484	  if (it->what == IT_CHARACTER)
> 26485	    {
> 26486	      XChar2b char2b;
> 26487	      struct face *face = FACE_FROM_ID (it->f, it->face_id);
> 26488	      struct font *font = face->font;
> 26489	      struct font_metrics *pcm = NULL;
> 26490	      int boff;			/* Baseline offset.  */
> 26491	
> 26492	      if (font == NULL)
> (gdb) p face
> $1 = (struct face *) 0x0
> (gdb) p it->face_id
> $2 = 18
> (gdb) p it->f->face_cache->used
> $3 = 15

This is another incarnation of several similar crashes we've seen for
the past year or so (you can see them on the bug tracker).  I was
never able to find the code path which is responsible for this strange
situation, where a (supposedly) realized face is somehow not cached.
If you can somehow produce a trace of face caching and un-caching in
this recipe, with backtraces to show who calls those, perhaps we could
finally nail this sucker.