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

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

Re: Hang while scrolling buffer with PNG images


From: Ralf Angeli
Subject: Re: Hang while scrolling buffer with PNG images
Date: Mon, 8 Sep 2003 12:28:48 +0200
User-agent: Mutt/1.5.4i

* Richard Stallman (2003-09-07,16:23) writes:

> Can you please try following the instructions given in
> etc/DEBUG for debugging an infinite loop?

Thank you for that pointer.  I was not aware of such a document.

Following the instructions I found that an infinite loop occurs at
three different points:

==========================

(gdb) finish
Run till exit from #0  move_it_vertically_backward (it=0xbfffe160,
dy=1)
    at xdisp.c:5862
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0, 
    scroll_step=1, temp_scroll_step=0, last_line_misfit=-1073749664)
    at xdisp.c:10820
10820         scroll_margin_pos = it.current.pos;
(gdb) finish
Run till exit from #0  try_scrolling (window=1213625160,
just_this_one_p=1, 
    scroll_conservatively=0, scroll_step=1, temp_scroll_step=0, 
    last_line_misfit=-1073749664) at xdisp.c:10820

==========================

(gdb) finish
Run till exit from #0  start_display (it=0xbfffe160, w=0xbfffe160,
pos=
      {charpos = 2932, bytepos = 2949}) at xdisp.c:2203
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0,
    scroll_step=1, temp_scroll_step=0, last_line_misfit=-1073749664)
    at xdisp.c:10819
10819         move_it_vertically (&it, - end_scroll_margin);
(gdb) finish
Run till exit from #0  try_scrolling (window=1213625160,
just_this_one_p=1,
    scroll_conservatively=0, scroll_step=1, temp_scroll_step=0,
    last_line_misfit=-1073749664) at xdisp.c:10819

==========================

(gdb) finish
Run till exit from #0  0x080725b8 in try_window (window=1213625160,
pos=
      {charpos = -1073750304, bytepos = 1055}) at xdisp.c:12034
0x0806eebf in try_scrolling (window=1213625160, just_this_one_p=1, 
    scroll_conservatively=0, scroll_step=1, temp_scroll_step=0, 
    last_line_misfit=1055) at xdisp.c:10937
10937     if (!try_window (window, startp))
Value returned is $58 = 1
(gdb) finish
Run till exit from #0  0x0806eebf in try_scrolling
(window=1213625160, 
    just_this_one_p=1, scroll_conservatively=0, scroll_step=1, 
    temp_scroll_step=0, last_line_misfit=1055) at xdisp.c:10937

==========================

Most of the time it is the last one.

I went through the last one with `step':

==========================

(gdb) finish
Run till exit from #0  0x080725b8 in try_window (window=1213625160,
pos=
      {charpos = -1073750304, bytepos = 1055}) at xdisp.c:12034
0x0806eebf in try_scrolling (window=1213625160, just_this_one_p=1, 
    scroll_conservatively=0, scroll_step=1, temp_scroll_step=0, 
    last_line_misfit=1055) at xdisp.c:10937
10937     if (!try_window (window, startp))
Value returned is $179 = 1
(gdb) step
10939     else if (w->cursor.vpos < 0)
(gdb) step
10947         if (!just_this_one_p
(gdb) step
10954         if (! make_cursor_line_fully_visible (w))
(gdb) step
make_cursor_line_fully_visible (w=0x41f) at xdisp.c:10659
10659   {
(gdb) step
10666     if (w->cursor.vpos < 0)
(gdb) step
10659   {
(gdb) step
10666     if (w->cursor.vpos < 0)
(gdb) step
10669     matrix = w->desired_matrix;
(gdb) step
10670     row = MATRIX_ROW (matrix, w->cursor.vpos);
(gdb) step
10673     if (!MATRIX_ROW_PARTIALLY_VISIBLE_P (row))
(gdb) step
971       struct frame *f = XFRAME (w->frame);
(gdb) 
972       int height = WINDOW_TOTAL_HEIGHT (w);
(gdb) 
982       if (WINDOW_WANTS_MODELINE_P (w))
(gdb) 
972       int height = WINDOW_TOTAL_HEIGHT (w);
(gdb) 
982       if (WINDOW_WANTS_MODELINE_P (w))
(gdb) 
985             = (w->current_matrix && w->current_matrix->rows
(gdb) 
988           if (ml_row && ml_row->mode_line_p)
(gdb) 
989             height -= ml_row->height;
(gdb) 
994       if (WINDOW_WANTS_HEADER_LINE_P (w))
(gdb) 
1004        }
(gdb) 
10679     if (row->height >= window_height)
(gdb) 
10721   }
(gdb) 
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0, 
    scroll_step=1, temp_scroll_step=0, last_line_misfit=1055) at
    xdisp.c:10956
10956             clear_glyph_matrix (w->desired_matrix);
(gdb) 
10957             last_line_misfit = 1;
(gdb) 
10956             clear_glyph_matrix (w->desired_matrix);
(gdb) 
clear_glyph_matrix (matrix=0x858fe60) at dispnew.c:966
966       if (matrix)
(gdb) 
968           enable_glyph_matrix_rows (matrix, 0, matrix->nrows, 0);
(gdb) 
enable_glyph_matrix_rows (matrix=0x858fe60, start=0, end=54,
enabled_p=0)
    at dispnew.c:947
947       for (; start < end; ++start)
(gdb) 
948         matrix->rows[start].enabled_p = enabled_p != 0;
(gdb) 
947       for (; start < end; ++start)
(gdb) 
948         matrix->rows[start].enabled_p = enabled_p != 0;

[ many of these ]

948         matrix->rows[start].enabled_p = enabled_p != 0;
(gdb) 
947       for (; start < end; ++start)
(gdb) 
949     }
(gdb) 
clear_glyph_matrix (matrix=0x858fe60) at dispnew.c:969
969           matrix->no_scrolling_p = 0;
(gdb) 
971     }
(gdb) 
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0, 
    scroll_step=1, temp_scroll_step=0, last_line_misfit=1) at
    xdisp.c:10958
10958             goto too_near_end;
(gdb) 
10812     CHARPOS (scroll_margin_pos) = XINT (window_end);
(gdb) 
10813     BYTEPOS (scroll_margin_pos) = CHAR_TO_BYTE (CHARPOS
(scroll_margin_pos));
(gdb) 
buf_charpos_to_bytepos (b=0x858d828, charpos=2932) at marker.c:140
140       if (charpos < BUF_BEG (b) || charpos > BUF_Z (b))
(gdb)
144       best_above_byte = BUF_Z_BYTE (b);
(gdb)
143       best_above = BUF_Z (b);
(gdb)
149       if (best_above == best_above_byte)
(gdb)
144       best_above_byte = BUF_Z_BYTE (b);
(gdb)
149       if (best_above == best_above_byte)
(gdb)
152       best_below = BEG;
(gdb)
164       CONSIDER (BUF_PT (b), BUF_PT_BYTE (b));
(gdb)
153       best_below_byte = BEG_BYTE;
(gdb)
164       CONSIDER (BUF_PT (b), BUF_PT_BYTE (b));
(gdb)
0x08107218      170         CONSIDER (cached_charpos, cached_bytepos);
(gdb)
165       CONSIDER (BUF_GPT (b), BUF_GPT_BYTE (b));
(gdb)
166       CONSIDER (BUF_BEGV (b), BUF_BEGV_BYTE (b));
(gdb)
0x081071ab      170         CONSIDER (cached_charpos, cached_bytepos);
(gdb)
167       CONSIDER (BUF_ZV (b), BUF_ZV_BYTE (b));
(gdb)
169       if (b == cached_buffer && BUF_MODIFF (b) == cached_modiff)
(gdb)
170         CONSIDER (cached_charpos, cached_bytepos);
(gdb)
172       for (tail = BUF_MARKERS (b); tail; tail = tail->next)
(gdb)
174           CONSIDER (tail->charpos, tail->bytepos);
(gdb)
179           if (best_above - best_below < 50)
(gdb)
172       for (tail = BUF_MARKERS (b); tail; tail = tail->next)
(gdb)
174           CONSIDER (tail->charpos, tail->bytepos);
(gdb)
179           if (best_above - best_below < 50)
(gdb)

[ many, many of these ]

(gdb) 
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0, 
    scroll_step=1, temp_scroll_step=0, last_line_misfit=1) at
    xdisp.c:10815
10815     end_scroll_margin = this_scroll_margin + !!last_line_misfit;
(gdb) 
10816     if (end_scroll_margin)
(gdb) 
10818         start_display (&it, w, scroll_margin_pos);
(gdb) 
10819         move_it_vertically (&it, - end_scroll_margin);
(gdb) 
10818         start_display (&it, w, scroll_margin_pos);
(gdb) 
start_display (it=0x8567348, w=0x8567348, pos=
      {charpos = -1073749664, bytepos = -1}) at xdisp.c:2198

==========================

After that it goes on and on without producing some kind of special
pattern or loop I could identify.  You can sit there, hold the return
key for minutes and somewhere there will be something knew, breaking a
pattern I thought I could identify.  Am I missing here something?  I
thought that I would find a infinite loop somewhere while stepping
through it.  But this could be due to my limited knowledge of
debugging.  Any hints are welcome.  Hopefully this is useful
nevertheless.

Regards,
Ralf




reply via email to

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