emacs-devel
[Top][All Lists]
Advanced

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

Re: Question about display engine


From: Ergus
Subject: Re: Question about display engine
Date: Sun, 13 Oct 2019 18:44:24 +0200
User-agent: NeoMutt/20180716

On Sun, Oct 13, 2019 at 07:06:18PM +0300, Eli Zaretskii wrote:
Date: Sun, 13 Oct 2019 17:40:52 +0200
From: Ergus <address@hidden>
Cc: address@hidden, address@hidden

#0  0x000055cb1453ac98 in redisplay_windows (window=0x55cb15e3bfb5) at 
../../src/xdisp.c:16126
#1  0x000055cb1453ac6d in redisplay_windows (window=0x55cb163ffc55) at 
../../src/xdisp.c:16120
#2  0x000055cb1455b35d in redisplay_internal () at ../../src/xdisp.c:15596
#3  0x000055cb145fff3f in read_char (commandflag=1, map=0x55cb16838f93, 
prev_event=0x0, used_mouse_menu=0x7ffc1a89f4eb, end_time=0x0) at 
../../src/keyboard.c:2473
#4  0x000055cb1460278a in read_key_sequence
    (keybuf=<optimized out>, prompt=0x0, dont_downcase_last=<optimized out>, 
can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=<optimized out>)
    at ../../src/keyboard.c:9527
#5  0x000055cb14603e2c in command_loop_1 () at ../../src/lisp.h:1032
#6  0x000055cb1466af87 in internal_condition_case
    (bfun=bfun@entry=0x55cb14603c30 <command_loop_1>, handlers=handlers@entry=0x90, 
hfun=hfun@entry=0x55cb145fadc0 <cmd_error>) at ../../src/eval.c:1355
#7  0x000055cb145f5b94 in command_loop_2 (ignore=ignore@entry=0x0) at 
../../src/lisp.h:1032
#8  0x000055cb1466aee1 in internal_catch (tag=tag@entry=0xd4a0, 
func=func@entry=0x55cb145f5b70 <command_loop_2>, arg=arg@entry=0x0) at 
../../src/eval.c:1116
#9  0x000055cb145f5b3b in command_loop () at ../../src/lisp.h:1032
#10 0x000055cb145fa9d6 in recursive_edit_1 () at ../../src/keyboard.c:714
#11 0x000055cb145fad02 in Frecursive_edit () at ../../src/keyboard.c:786
#12 0x000055cb1451c957 in main (argc=18, argv=<optimized out>) at 
../../src/emacs.c:2055

After some other tests I just did; I found that:

#0 seems to be the root of the loop. redisplay_windows never ends (inf
 loop) and I can't understand why. But at least this explains why in gui
 it works but not in tui, because there is the WINDOWP test.

The WINDOWP test has nothing to do with GUI vs TTY, it tests whether
w->contents is a window or a buffer.

What I can't understand is how the code can be in #1 that should always
filtered by the WINDOWP condition in tui right?

No, see above.

This function is a simple depth-first tree traversal of the window
tree, starting from the root window of a frame.  Each leaf of the
window tree has a buffer in its w->contents pointer, while
intermediate nodes of the tree have windows in that pointer.

In any case the inf loop is there, but the recursions levels does not
grow... so after the first time it enters in #1, it goes in the other
branch if the if.

If it goes to the other branch, it should descend the tree via the
w->next pointer, and eventually get to a leaf node.

Could it be that redisplay_window_0, or some function it calls,
signals an error, which is caught by internal_condition_case_1?  What
happens if you put a breakpoint in signal_or_quit, does it get called
from redisplay_window or some other function called by
redisplay_windows?

Yes, actually:

#0  0x00005597732a0380 in signal_or_quit (error_symbol=0x2cd0, 
data=0x559775ee2633, keyboard_quit=false) at ../../src/eval.c:1586
#1  0x000055977314c308 in Fsignal (error_symbol=<optimized out>, 
error_symbol@entry=0x2cd0, data=<optimized out>) at ../../src/eval.c:1568
#2  0x000055977314c4c9 in xsignal (data=<optimized out>, error_symbol=0x2cd0) 
at ../../src/lisp.h:4139
#3  0x000055977314c4c9 in xsignal2 (error_symbol=error_symbol@entry=0x2cd0, 
arg1=<optimized out>, arg2=<optimized out>) at ../../src/eval.c:1713
#4  0x000055977314b76e in args_out_of_range (a1=<optimized out>, a2=<optimized 
out>) at ../../src/lisp.h:1032
#5  0x000055977314e97b in validate_interval_range (object=0x559775cee0d5, 
begin=0x7fff35ec34b8, end=0x7fff35ec34b8, force=<optimized out>) at 
../../src/textprop.c:158
#6  0x00005597732f4050 in Ftext_properties_at (position=<optimized out>, 
object=<optimized out>) at ../../src/textprop.c:572
#7  0x00005597732f40bc in Fget_text_property (position=<optimized out>, prop=0x5d30, 
object=<optimized out>) at ../../src/textprop.c:592
#8  0x00005597731f8eec in face_at_buffer_position
   (w=0x5597758e7620, pos=0, endptr=endptr@entry=0x7fff35ec3650, limit=100, 
mouse=mouse@entry=false, base_face_id=1, attr_filter=LFACE_EXTEND_INDEX)
   at ../../src/xfaces.c:6090
#9  0x000055977316ab25 in face_at_pos (it=0x7fff35ec3710, 
attr_filter=LFACE_EXTEND_INDEX) at ../../src/xdisp.c:4167
#10 0x000055977317083d in extend_face_to_end_of_line (it=0x7fff35ec3710) at 
../../src/xdisp.c:21584
#11 0x0000559773185891 in display_mode_line (w=w@entry=0x5597758e7620, 
face_id=<optimized out>, format=0x7efd5d2d9ed3) at ../../src/xdisp.c:24990
#12 0x0000559773185afe in display_mode_lines (w=w@entry=0x5597758e7620) at 
../../src/lisp.h:730
#13 0x000055977319ebbc in redisplay_window (window=0x5597758e7625, 
just_this_one_p=<optimized out>) at ../../src/xdisp.c:18803
#14 0x00005597731a327b in redisplay_window_0 
(window=window@entry=0x5597758e7625) at ../../src/xdisp.c:16146
#15 0x000055977329f014 in internal_condition_case_1
   (bfun=bfun@entry=0x5597731a3250 <redisplay_window_0>, arg=arg@entry=0x5597758e7625, 
handlers=<optimized out>, hfun=hfun@entry=0x559773165800 <redisplay_window_error>) at 
../../src/eval.c:1379
#16 0x000055977316ec98 in redisplay_windows (window=0x5597758e7625) at 
../../src/xdisp.c:16126
#17 0x000055977316ec6d in redisplay_windows (window=0x5597758e7415) at 
../../src/xdisp.c:16120
#18 0x000055977318f35d in redisplay_internal () at ../../src/xdisp.c:15596
#19 0x0000559773233f3f in read_char (commandflag=1, map=0x559775ee36d3, 
prev_event=0x0, used_mouse_menu=0x7fff35ec8cbb, end_time=0x0) at 
../../src/keyboard.c:2473
#20 0x000055977323678a in read_key_sequence
   (keybuf=<optimized out>, prompt=0x0, dont_downcase_last=<optimized out>, 
can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=<optimized out>)
   at ../../src/keyboard.c:9527
#21 0x0000559773237e2c in command_loop_1 () at ../../src/lisp.h:1032
#22 0x000055977329ef87 in internal_condition_case
   (bfun=bfun@entry=0x559773237c30 <command_loop_1>, handlers=handlers@entry=0x90, 
hfun=hfun@entry=0x55977322edc0 <cmd_error>) at ../../src/eval.c:1355
#23 0x0000559773229b94 in command_loop_2 (ignore=ignore@entry=0x0) at 
../../src/lisp.h:1032
#24 0x000055977329eee1 in internal_catch (tag=tag@entry=0xd4a0, 
func=func@entry=0x559773229b70 <command_loop_2>, arg=arg@entry=0x0) at 
../../src/eval.c:1116
#25 0x0000559773229b3b in command_loop () at ../../src/lisp.h:1032
#26 0x000055977322e9d6 in recursive_edit_1 () at ../../src/keyboard.c:714
#27 0x000055977322ed02 in Frecursive_edit () at ../../src/keyboard.c:786
#28 0x0000559773150957 in main (argc=18, argv=<optimized out>) at 
#../../src/emacs.c:2055

This makes more sense now.




reply via email to

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