Subject: bug#1070: Looping in redisplay due to font problem

From: Chong Yidong <[email-masked]>
Date: Thu, 02 Oct 2008 19:47:25 -0400

After the 2008-07-09 change to ftfont.c, Emacs can loop during redisplay
under the following conditions:

xrdb /dev/null
emacs -Q fc-list.list   [fc-list.list is attached]
<PageDown>
<PageDown>
<PageDown>
<PageDown>

Emacs begins looping while in redisplay, while displaying the text
"Corsivo" (the final letter "o" blinks rapidly).

Strangely enough, I can't reproduce this if I substitute C-v for
PageDown (?!??!).  Also, the bug doesn't show up if there is an X
resource Emacs.geometry already defined.

The problem seems to have appeared for the first time during the checkin
listed below.  My tests indicate that the other files involved this
checkin do not affect the problem.

Could you see if you can reproduce this problem, and review the code
changes to see if they may have caused it?  Thanks!

2008-07-09  Kenichi Handa  <[email-masked]>

	* ftfont.c (struct ftfont_info): New member index, delete member
	fc_charset_idx.  Make the member order compatible with struct
	xftfont_info.
	(fc_charset_table): Change charset names to registry names.
	(ftfont_pattern_entity): Delete the args registry and
	fc_charset_idx.  Change the value of :font-entity property
	to (FONTNAME . INDEX).  Always set :registry property to
	`iso10646-1'.
	(struct ftfont_cache_data): New struct.
	(ftfont_lookup_cache): New arg for_face.
	(ftfont_get_fc_charset, ftfont_get_otf): New functions.
	(ftfont_driver): Set the member otf_capability.
	(ftfont_get_charset): Adjust it for the change of
	fc_charset_table.
	(OTF_TAG_SYM): New macro.
	(ftfont_spec_pattern): Delete the arg fc_charset_idx.  Adjust it
	for the change of fc_charset_table.
	(ftfont_list): Adjust it for the change of ftfont_spec_pattern and
	ftfont_pattern_entity.  Add FC_INDEX to objset.
	(ftfont_match): Adjust it for the change of ftfont_spec_pattern
	and ftfont_pattern_entity.
	(ftfont_open): Adjust it for the change of ftfont_lookup_cache,
	font_make_object, struct ftfont_info.
	(ftfont_has_char): Use ftfont_get_fc_charset.
	(ftfont_otf_features, ftfont_otf_capability): New functions.
	(ftfont_shape): Use ftfont_get_otf.
	(ftfont_text_extents): Fix initial setting of metrics.