Subject: bug#1101 closed by Chong Yidong <[email-masked]> (Re: Looping in redisplay due to font problem)

From: [email-masked] (Emacs bug Tracking System)

This is an automatic notification regarding your bug report
which was filed against the emacs package:

#1070: Looping in redisplay due to font problem

It has been closed by Chong Yidong <[email-masked]>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Chong Yidong <[email-masked]> by
replying to this email.

-- 
1070: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=1070
Emacs Bug Tracking System
Contact [email-masked] with problems
>From [email-masked] Thu Oct  9 09:44:01 2008
From: Chong Yidong <[email-masked]>
To: Kenichi Handa  <[email-masked]>
Cc: [email-masked]
Subject: Re: Looping in redisplay due to font problem
Date: Thu, 09 Oct 2008 12:45:45 -0400

I found the bug: it's an infloop in update_text_area which can happen
when the pixel width of the current glyph is smaller than the lbearing
of the next glyph.  I'm not sure why the bug was triggered only under
the situation I described; maybe, only that exact geometry and font
produced the numbers leading to the infloop.

I've checked in a fix.

>From [email-masked] Mon Oct  6 09:35:47 2008
From: Chong Yidong <[email-masked]>
To: Kenichi Handa <[email-masked]>
Cc: [email-masked]
Subject: Re: Looping in redisplay due to font problem
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
}