emacs-pretest-bug
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: custom mode-line face makes Emacs freeze up


From: Stephen Berman
Subject: Re: custom mode-line face makes Emacs freeze up
Date: Tue, 26 Oct 2004 00:22:06 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/21.3.50 (gnu/linux)

On Sun, 24 Oct 2004 13:10:14 -0400 Richard Stallman <address@hidden> wrote:

> I tried this recipe but it did not freeze for me.  Perhaps it doesn't
> freeze for all files, perhaps it depends on the files.  (I tried with
> emacs.c and cmds.c from emacs/src.)
>
> So I guess the bug depends on some conditions that vary.

So far the freeze has happened with every pair of files I've tried
with Ediff.  I've noticed two additional data points: 

(i) The minimal triggering customization is smaller than I reported: a
narrow (or compressed or condensed -- they're all the same with the
font families I've tried) width, a small enough height (12 pt or less
in the default font), and overlining -- underlining isn't needed and
without overlining doesn't trigger the bug.

(ii) This doesn't happen for me with the CVS build of ntemacs from
July 9, available from http://www.crasseux.com/emacs/ running under
Windows XP.

> This appears to be a case of looping.  So could you try investigating
> it with the methods described in etc/DEBUG for "If the symptom of the
> bug is that Emacs fails to respond"?  Maybe you will get enough info
> that we can fix it.

Here's what I got; I hope one of the experts can see from it what the
problem is:

(gdb) r -q -no-site-file
Starting program: /usr/local/src/cvsroot/emacs/src/emacs -q -no-site-file

Program received signal SIGTSTP, Stopped (user).
0x080f52aa in face_at_buffer_position (w=0x8924018, pos=1, region_beg=-1, 
    region_end=-1, endptr=0xbfffcc98, limit=144188448, mouse=0)
    at xfaces.c:4980
4980        equal_p = face_attr_equal_p (v1[i], v2[i]);
(gdb) step

Program received signal SIGTSTP, Stopped (user).
0x080f52aa in face_at_buffer_position (w=0x8924018, pos=1, region_beg=-1, 
    region_end=-1, endptr=0xbfffcc98, limit=144188448, mouse=0)
    at xfaces.c:4980
4980        equal_p = face_attr_equal_p (v1[i], v2[i]);

<So it's a loop.>

(gdb) finish 
Run till exit from #0  0x080f52aa in face_at_buffer_position (w=0x8924018, 
    pos=1, region_beg=-1, region_end=-1, endptr=0xbfffcc98, limit=144188448, 
    mouse=0) at xfaces.c:4980
handle_face_prop (it=0xbfffd290) at xdisp.c:2871
2871          if (new_face_id != it->face_id)
Value returned is $1 = 0
(gdb) finish 
Run till exit from #0  handle_face_prop (it=0xbfffd290) at xdisp.c:2871
handle_stop (it=0xbfffd290) at xdisp.c:2592
2592              if (handled == HANDLED_RECOMPUTE_PROPS)
Value returned is $2 = HANDLED_NORMALLY
(gdb) finish 
Run till exit from #0  handle_stop (it=0xbfffd290) at xdisp.c:2592
next_element_from_buffer (it=0xbfffd290) at xdisp.c:5487
5487              return get_next_display_element (it);
(gdb) finish 
Run till exit from #0  next_element_from_buffer (it=0xbfffd290) at xdisp.c:5487
get_next_display_element (it=0xbfffd290) at xdisp.c:4839
4839      if (it->what == IT_CHARACTER)
Value returned is $3 = 1
(gdb) finish 
Run till exit from #0  get_next_display_element (it=0xbfffd290) at xdisp.c:4839
0x0809a96d in move_it_in_display_line_to (it=0xbfffd290, to_charpos=1, 
    to_x=-1, op=12) at xdisp.c:5661
5661          if (!get_next_display_element (it)
Value returned is $4 = 1
(gdb) finish 
Run till exit from #0  0x0809a96d in move_it_in_display_line_to (
    it=0xbfffd290, to_charpos=1, to_x=-1, op=12) at xdisp.c:5661
move_it_to (it=0xbfffd290, to_charpos=1, to_x=-1, to_y=-1, to_vpos=1, op=12)
    at xdisp.c:5919
5919                  if (skip == MOVE_POS_MATCH_OR_ZV || it->vpos == to_vpos)
Value returned is $5 = MOVE_POS_MATCH_OR_ZV
(gdb) finish 
Run till exit from #0  move_it_to (it=0xbfffd290, to_charpos=1, to_x=-1, 
    to_y=-1, to_vpos=1, op=12) at xdisp.c:5919
move_it_vertically_backward (it=0xbfffd5c0, dy=0) at xdisp.c:6097
6097      it3 = it2;
(gdb) finish 
Run till exit from #0  move_it_vertically_backward (it=0xbfffd5c0, dy=0)
    at xdisp.c:6097
redisplay_window (window=143802396, just_this_one_p=0) at xdisp.c:12029
12029     if (it.current_y <= 0)
(gdb) finish 
Run till exit from #0  redisplay_window (window=143802396, just_this_one_p=0)
    at xdisp.c:12029

<That's where it gets stuck, and here's the loop:>

12029     if (it.current_y <= 0)
(gdb) next
12041     set_marker_both (w->start, Qnil, IT_CHARPOS (it), IT_BYTEPOS (it));
(gdb) next
12037     it.current_x = it.hpos = 0;
(gdb) next
12041     set_marker_both (w->start, Qnil, IT_CHARPOS (it), IT_BYTEPOS (it));
(gdb) next
10829   {
(gdb) next
10830     struct window *w = XWINDOW (window);
(gdb) next
10831     SET_MARKER_FROM_TEXT_POS (w->start, startp);
(gdb) next
10830     struct window *w = XWINDOW (window);
(gdb) next
10831     SET_MARKER_FROM_TEXT_POS (w->start, startp);
(gdb) next
10833     if (current_buffer != XBUFFER (w->buffer))
(gdb) next
10831     SET_MARKER_FROM_TEXT_POS (w->start, startp);
(gdb) next
10833     if (current_buffer != XBUFFER (w->buffer))
(gdb) next
10836     if (!NILP (Vwindow_scroll_functions))
(gdb) next
12047     if (!current_matrix_up_to_date_p
(gdb) next
10829   {
(gdb) next
12047     if (!current_matrix_up_to_date_p
(gdb) next
12057       try_window (window, startp);
(gdb) next
12062     if (fonts_changed_p)
(gdb) next
12070     if (w->cursor.vpos < 0)
(gdb) next
12103     if (!make_cursor_line_fully_visible (w, centering_position > 0))
(gdb) next
12106         if (w->vscroll)
(gdb) next
12116         clear_glyph_matrix (w->desired_matrix);
(gdb) next
12118         goto point_at_top;
(gdb) next
12117         centering_position = 0;
(gdb) next
12015     if (!buffer_unchanged_p)
(gdb) next
12016       w->base_line_number = Qnil;
(gdb) next
12019     init_iterator (&it, w, PT, PT_BYTE, NULL, DEFAULT_FACE_ID);
(gdb) next
12021     move_it_vertically_backward (&it, centering_position);
(gdb) next
12020     it.current_y = it.last_visible_y;
(gdb) next
12021     move_it_vertically_backward (&it, centering_position);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]