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

From: Chong Yidong <[email-masked]>
Date: Mon, 06 Oct 2008 12:37:09 -0400

Kenichi Handa <[email-masked]> writes:

>> #0  0x00007f54662e1433 in select () from /lib/libc.so.6
>> #1  0x00007f546403b2b6 in ?? () from /usr/lib/libxcb.so.1
>> #2  0x00007f546403b8eb in ?? () from /usr/lib/libxcb.so.1
>> #3  0x00007f546403c050 in xcb_send_request () from /usr/lib/libxcb.so.1
>> #4  0x00007f5466e71f1a in _XPutXCBBuffer () from /usr/lib/libX11.so.6
>> #5  0x00007f5466e72267 in ?? () from /usr/lib/libX11.so.6
>> #6  0x00007f54650be5a3 in XRenderFillRectangle () from /usr/lib/libXrender.so.1
>
> Does Emacs always stop at that place when you repeat "cont"
> and "stop"?

Yes, it always seems to stop at this place.  Here's `bt full' and a
debugging session.  I don't see anything wrong OTOH, and am unsure about
what to look for.  Stepping forward in gdb doesn't work because the
program is stopped inside `select'.  Any suggestions?

#0  0x00007f6dd0fe5433 in select () from /lib/libc.so.6
#1  0x00007f6dcf0422b6 in ?? () from /usr/lib/libxcb.so.1
#2  0x00007f6dcf0428eb in ?? () from /usr/lib/libxcb.so.1
#3  0x00007f6dcf043050 in xcb_send_request () from /usr/lib/libxcb.so.1
#4  0x00007f6dd1943f1a in _XPutXCBBuffer () from /usr/lib/libX11.so.6
#5  0x00007f6dd1944267 in ?? () from /usr/lib/libX11.so.6
#6  0x00007f6dd19370bd in XSetClipMask () from /usr/lib/libX11.so.6
#7  0x00000000004e426d in x_draw_glyph_string (s=0x7fffdd7a95e0)
    at xterm.c:2883
        relief_drawn_p = 0
#8  0x00000000004617cc in draw_glyphs (w=0x1cd5ad0, x=72, row=0x1f727d0, 
    area=TEXT_AREA, start=7, end=8, hl=DRAW_NORMAL_TEXT, overlaps=0)
    at xdisp.c:20504
        head = (struct glyph_string *) 0x7fffdd7a95e0
        tail = (struct glyph_string *) 0x7fffdd7a95e0
        s = (struct glyph_string *) 0x7fffdd7a95e0
        clip_head = (struct glyph_string *) 0x0
        clip_tail = (struct glyph_string *) 0x0
        i = 8
        j = -579167284
        x_reached = 72
        last_x = 648
        area_left = 8
        f = (struct frame *) 0x19a52b0
#9  0x0000000000466f9c in x_write_glyphs (start=0x13de968, len=1)
    at xdisp.c:21913
        x = 0
        hpos = 7
#10 0x0000000000418fe2 in update_text_area (w=0x1cd5ad0, vpos=8)
    at dispnew.c:4585
        start_x = 56
        start_hpos = 7
        start = (struct glyph *) 0x13de968
        current_x = 64
        skip_first_p = 0
        can_skip_p = 1
        stop = 33
        i = 8
        desired_glyph = (struct glyph *) 0x13de990
        overlapping_glyphs_p = 1
        desired_stop_pos = 62
        x = 64
        current_glyph = (struct glyph *) 0x1f8d8e0
        current_row = (struct glyph_row *) 0xf63610
        desired_row = (struct glyph_row *) 0x1f727d0
        rif = (struct redisplay_interface *) 0x8a46c0
        changed_p = 1
(gdb) f 8
#8  0x0000000000656170 in xftfont_draw (s=0x7fff461d8010, from=0, to=1, x=64, 
    y=149, with_background=1) at xftfont.c:549
549         XftDrawRect (xft_draw, &bg,
(gdb) p s
$1 = (struct glyph_string *) 0x7fff461d8010
(gdb) p *s
$2 = {
  x = 64, 
  y = 136, 
  ybase = 149, 
  width = 8, 
  background_width = 8, 
  height = 17, 
  left_overhang = 0, 
  right_overhang = 0, 
  f = 0x19a52b0, 
  w = 0x1cd5ad0, 
  display = 0xcb8790, 
  window = 54526142, 
  row = 0x1f6f7f0, 
  area = TEXT_AREA, 
  char2b = 0x7fff461d7ff0, 
  nchars = 1, 
  hl = DRAW_NORMAL_TEXT, 
  face = 0x13cdae0, 
  font = 0x1c04810, 
  cmp = 0x0, 
  cmp_id = 0, 
  cmp_from = 0, 
  cmp_to = 0, 
  extends_to_end_of_line_p = 0, 
  background_filled_p = 0, 
  two_byte_p = 0, 
  font_not_found_p = 0, 
  stippled_p = 0, 
  for_overlaps = 0, 
  padding_p = 0, 
  gc = 0xfbbf00, 
  first_glyph = 0x13de968, 
  img = 0x0, 
  slice = {
    x = 0, 
    y = 0, 
    width = 0, 
    height = 0
  }, 
  clip_head = 0x0, 
  clip_tail = 0x0, 
  clip = {{
      x = 8, 
      y = 136, 
      width = 640, 
      height = 17
    }, {
      x = 0, 
      y = 0, 
      width = 0, 
      height = 0
    }}, 
  num_clips = 1, 
  underline_position = 0, 
  underline_thickness = 0, 
  next = 0x0, 
  prev = 0x0
}
(gdb) p *(s->font)
$3 = {
  size = 4611686018429485074, 
  next = 0x1c121e0, 
  props = {12109345, 21852401, 18521457, 11665121, 12097873, 205440, 205056, 
    205312, 104, 11665121, 800, 0, 12327557, 11665121, 31929283, 31929251, 
    31929347, 18521505}, 
  max_width = 0, 
  pixel_size = 13, 
  height = 17, 
  space_width = 8, 
  average_width = 8, 
  min_width = 8, 
  ascent = 13, 
  descent = 4, 
  underline_thickness = 0, 
  underline_position = 0, 
  vertical_centering = 0, 
  encoding_type = 0 '\0', 
  baseline_offset = 0, 
  relative_compose = 0, 
  default_ascent = 0, 
  font_encoder = 0x1c04aa0, 
  driver = 0xb16da0, 
  encoding_charset = -1, 
  repertory_charset = -1
}