[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: SIGSEGV -- redisplay bug
From: |
Alex Schroeder |
Subject: |
Re: SIGSEGV -- redisplay bug |
Date: |
Fri, 31 Jan 2003 15:59:57 +0100 |
User-agent: |
Gnus/5.090015 (Oort Gnus v0.15) Emacs/21.2.92 (i686-pc-linux-gnu) |
Richard Stallman <address@hidden> writes:
> /* Increment positions in glyphs. */
> for (area = 0; area < LAST_AREA; ++area)
> for (i = 0; i < row->used[area]; ++i)
> if (BUFFERP (row->glyphs[area][i].object)
> && row->glyphs[area][i].charpos > 0)
> row->glyphs[area][i].charpos += delta;
>
> (gdb) p area
> $1 = 4159280
>
> I don't see how anything here could enable area to get bigger than 2,
> unless area is stored in the stack and some absurd pointers or indices
> make row->glyphs[area][i].charpos alias with that stack slot.
>
> But such aliasing should be impossible as long as AREA and I are
> reasonable. The glyphs are in the heap, nowhere near the stack.
>
> Could you look at the values of row->used[0], row->used[1]
> and row->used[2]?
It happened again.
Program received signal SIGSEGV, Segmentation fault.
0x080506fd in increment_row_positions (row=0x92adc24, delta=1, delta_bytes=1)
at dispnew.c:1188
1188 if (BUFFERP (row->glyphs[area][i].object)
(gdb) bt
#0 0x080506fd in increment_row_positions (row=0x92adc24, delta=1,
delta_bytes=1) at dispnew.c:1188
#1 0x0804ff36 in increment_matrix_positions (matrix=0x8513208, start=29,
end=58, delta=1, delta_bytes=1) at dispnew.c:927
#2 0x08067401 in redisplay_internal (preserve_echo_area=0) at xdisp.c:8712
#3 0x080666e8 in redisplay () at xdisp.c:8284
#4 0x080d5c75 in read_char (commandflag=1, nmaps=4, maps=0xbffff5a4,
prev_event=405241980, used_mouse_menu=0xbffff5ec) at keyboard.c:2281
#5 0x080dc6d3 in read_key_sequence (keybuf=0xbffff6f4, bufsize=30,
prompt=405241980, dont_downcase_last=0, can_return_switch_frame=1,
fix_current_buffer=1)
at keyboard.c:8191
#6 0x080d4844 in command_loop_1 () at keyboard.c:1440
#7 0x08125749 in internal_condition_case (bfun=0x80d4550 <command_loop_1>,
handlers=405338372, hfun=0x80d4194 <cmd_error>) at eval.c:1267
#8 0x080d4428 in command_loop_2 () at keyboard.c:1245
#9 0x081252dd in internal_catch (tag=405299700, func=0x80d4404
<command_loop_2>, arg=405241980) at eval.c:1030
#10 0x080d43d7 in command_loop () at keyboard.c:1224
#11 0x080d3f51 in recursive_edit_1 () at keyboard.c:950
#12 0x080d4080 in Frecursive_edit () at keyboard.c:1006
#13 0x080d2faf in main (argc=1, argv=0xbffffcb4, envp=0xbffffcbc) at
emacs.c:1547
(gdb) l
1183 MATRIX_ROW_END_BYTEPOS (row) += delta_bytes;
1184
1185 /* Increment positions in glyphs. */
1186 for (area = 0; area < LAST_AREA; ++area)
1187 for (i = 0; i < row->used[area]; ++i)
1188 if (BUFFERP (row->glyphs[area][i].object)
1189 && row->glyphs[area][i].charpos > 0)
1190 row->glyphs[area][i].charpos += delta;
1191
1192 /* Capture the case of rows displaying a line end. */
(gdb) p area
$1 = 4011656
(gdb) p i
$2 = 101
(gdb) p row
$3 = (struct glyph_row *) 0x92adc24
(gdb) p row->used
$4 = {0, 159, 0}
Alex.