Andy Piper wrote:
It seems likely that your changes have tickled something, since we do
not see these on 21.4.x at all. I'm wondering whether the removal of
the window_mirror updates in mark_redisplay could be responsible.
possible, but it seems unlikely -- and if so, i've merely exposed an
existing bug; that code was clearly wrong and was causing other
crashes. i've seen periodic redisplay crashes for a long time,
certainly going back to 21.4 and before, some of which i fixed, but
others have been too random to diagnose. and i know there's lots of
problems with redisplay -- ms windows, gutters, etc. have stretched
redisplay far beyond its initial design. for example, the gutter code
introduced calling lisp inside of redisplay -- something which it
definitely was not designed for. it was patched around [note this:
/* This can call lisp, but redisplay is protected by binding
inhibit_quit. More importantly the code involving display lines
*assumes* that GC will not happen and so does not GCPRO
anything. Since we use this code the whole time with the gutters
we cannot allow GC to happen when manipulating the gutters. */
update_frame_gutters (f);
]
but this introduces tons of ways to shoot oneself unintentionally, since
we don't protect against modifying the window structures -- which could
happen e.g. if events get processed inside of redisplay. lots of weird
code runs off of hooks, which might be getting triggered by lisp called
from the gutter code.
ben
andy
At 01:59 AM 3/21/02 -0700, Ben Wing wrote:
> _free_dbg_lk(void * 0xdddddddd, int 1) line 1044 + 48 bytes
> _free_dbg(void * 0xdddddddd, int 1) line 1001 + 13 bytes
> free(void * 0xdddddddd) line 956 + 11 bytes
> xfree_1(void * 0xdddddddd) line 294 + 10 bytes
> Dynarr_free(void * 0x026ac340) line 221 + 17 bytes
> free_display_line(display_line * 0x02708790) line 6982 + 12 bytes
> free_display_lines(display_line_dynarr * 0x025f1428) line 7010 + 19
> bytes
> free_display_structs(window_mirror * 0x027d3d08) line 7029 + 12 bytes
> free_window_mirror(window_mirror * 0x027d3d08) line 506 + 9 bytes
> delete_frame_internal(frame * 0x0264a1e8, int 1, int 0, int 0) line
> 1581 + 34 bytes
> Fdelete_frame(long 40149480, long 21675144) line 1711 + 28 bytes
> Feval(long 36548800) line 3281 + 141 bytes
> Ffuncall(int 2, long * 0x0082fcbc) line 3479 + 66 bytes
> call1(long 21673680, long 36548800) line 4134 + 11 bytes
> execute_command_event(command_builder * 0x017e3f08, long 41671964)
> line 4075 + 57 bytes
> Fdispatch_event(long 41671964) line 4414 + 13 bytes
> Fcommand_loop_1() line 584 + 9 bytes
> command_loop_1(long 21676296) line 497
> condition_case_1(long 21671688, long (long)* 0x01079289
> command_loop_1(long), long 21676296, long (long, long)* 0x01078bdc
> cmd_error(long, long), long 21676296) line 1692 + 7 bytes
> command_loop_3() line 258 + 35 bytes
> command_loop_2(long 21676296) line 271
> internal_catch(long 21449544, long (long)* 0x01078d2c
> command_loop_2(long), long 21676296, int * volatile 0x00000000) line
> 1317 + 7 bytes
> initial_command_loop(long 21676296) line 307 + 25 bytes
> STACK_TRACE_EYE_CATCHER(int 1, char * * 0x00e52610, char * *
> 0x00e52b00, int 0) line 2305
> main(int 1, char * * 0x00e52610, char * * 0x00e52b00) line 2681
> mainCRTStartup() line 338 + 17 bytes
> KERNEL32! 77e8d326()
>