Subject: bug#38181: Actual height of mode-line not taken into account

From: martin rudalics <[email-masked]>
Date: Mon, 4 May 2020 17:04:18 +0200

> I don't think I follow.  Are you saying that
 > inhibit-free-realized-faces is non-nil when you run Lisp
 > interactively,

Yes.

 > or in general in a Lisp program that was not called,
 > directly or indirectly, from redisplay_internal?  That should never
 > happen, as the code arranges for inhibit-free-realized-faces to be
 > reset to its original value when redisplay_internal returns.  If this
 > doesn't work, then we have a serious bug on our hands, and should fix
 > it ASAP.

The problem here seems that the original value is true.  So if I'm not
entirely misguided it must be somehow set by PRODUCE_GLYPHS outside of
redisplay_internal.

 > This variable is supposed to be non-nil only when we are done
 > preparing the desired matrices and are about to call update_frame,
 > because that function cannot cope with faces referenced in the desired
 > matrices that were meanwhile freed.  This could happen if some hook
 > called from redisplay_internal manages to run code that decides to
 > free the faces.
 >
 > But once update_frame is done, we don't need this variable set
 > anymore, and it should revert to nil soon enough, because
 > redisplay_internal returns soon after that.
 >
 > What am I missing?

Your explanation coincides with how I expected this variable to behave.
It does not coincide with the behavior I see.

Thanks, martin