[Top][All Lists]
[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);