Subject: 24.4.50; Too large fringe width causes hang in redisplay
From: Dmitry Antipov <[email-masked]>
To: [email-masked]
Date: Wed, 16 Jul 2014 21:47:09 +0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Recently I erroneously set left-fringe-width to some large number
(don't remember an exact value), and got infloop in redisplay afterwards:

#0  0x000000000045578a in move_it_to (it=0x7fff7386b590, to_charpos=192, to_x=-1, to_y=-1, to_vpos=-1, op=8)
     at ../../trunk/src/xdisp.c:9319
#1  0x0000000000455af0 in move_it_vertically_backward (it=0x7fff7386d090, dy=306) at ../../trunk/src/xdisp.c:9400
#2  0x000000000046bdf2 in redisplay_window (window=..., just_this_one_p=false) at ../../trunk/src/xdisp.c:16475
#3  0x0000000000462d28 in redisplay_window_0 (window=...) at ../../trunk/src/xdisp.c:14247
#4  0x0000000000609711 in internal_condition_case_1 (bfun=0x462ce6 <redisplay_window_0>, arg=..., handlers=...,
     hfun=0x462cb5 <redisplay_window_error>) at ../../trunk/src/eval.c:1373
#5  0x0000000000462c93 in redisplay_windows (window=...) at ../../trunk/src/xdisp.c:14227
#6  0x0000000000461aed in redisplay_internal () at ../../trunk/src/xdisp.c:13826
#7  0x000000000045f830 in redisplay () at ../../trunk/src/xdisp.c:13112
#8  0x000000000056af5c in read_char (commandflag=1, map=..., prev_event=..., used_mouse_menu=0x7fff7386f4bf, end_time=0x0)
     at ../../trunk/src/keyboard.c:2560
#9  0x000000000057a593 in read_key_sequence (keybuf=0x7fff7386f6a0, bufsize=30, prompt=..., dont_downcase_last=false,
     can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at ../../trunk/src/keyboard.c:9084
#10 0x0000000000567f1e in command_loop_1 () at ../../trunk/src/keyboard.c:1438
#11 0x00000000006095a0 in internal_condition_case (bfun=0x567b5c <command_loop_1>, handlers=..., hfun=0x56732c <cmd_error>)
     at ../../trunk/src/eval.c:1349
#12 0x00000000005677fa in command_loop_2 (ignore=...) at ../../trunk/src/keyboard.c:1169
#13 0x0000000000608a23 in internal_catch (tag=..., func=0x5677d7 <command_loop_2>, arg=...) at ../../trunk/src/eval.c:1113
#14 0x00000000005677ae in command_loop () at ../../trunk/src/keyboard.c:1148
#15 0x0000000000566e58 in recursive_edit_1 () at ../../trunk/src/keyboard.c:769
#16 0x0000000000567028 in Frecursive_edit () at ../../trunk/src/keyboard.c:840
#17 0x0000000000564f2f in main (argc=4, argv=0x7fff7386fb28) at ../../trunk/src/emacs.c:1650

Recipe to reproduce is very simple:

./src/emacs -Q --eval '(progn (setq left-fringe-width 1000) (switch-to-buffer "test") (kill-buffer))'

This recipe works for all X-aware configurations on GNU/Linux.

Dmitry