* Need help debugging Emacs: emacsclient will not draw its contents sometimes
@ 2015-09-08 13:00 Jon Dufresne
2015-09-08 13:28 ` Tassilo Horn
2015-09-08 17:18 ` Eli Zaretskii
0 siblings, 2 replies; 26+ messages in thread
From: Jon Dufresne @ 2015-09-08 13:00 UTC (permalink / raw)
To: emacs-devel
Hi,
I run into a bug daily but I can't pin down the exact source of the problem.
I can't reproduce the bug on demand, but if I use Emacs long enough,
eventually the bug will be triggered.
The scenario:
I run Emacs using the Emacs daemon. I regularly connect to the daemon
with emacsclient. Frequently, the client is started from an external
program, such as during a mercurial commit. _Sometimes the emacsclient
frame will not draw its contents_, leaving Emacs in a useless state.
This only occurs after the Emacs daemon has been running for hours and
has already successfully started many emacsclients. When this occurs,
my window manager shows that the program is running and has drawn an
outline of where Emacs should be, but there are no contents. After the
first occurrence, all new emacsclients will suffer the same fate and
will not draw their contents. To Emacs return to a useful state, I
restart the Emacs daemon. This means I lose the open buffers of my
currently running Emacs.
Unfortunately, as I can't reliably reproduce this on demand, it is
difficult and time consuming to tests different versions of init.el.
Emacs version:
GNU Emacs 24.5.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.16.2) of
2015-04-22 on buildhw-10.phx2.fedoraproject.org
I have attached a debugger to the running Emacs after this has
occurred. I see the following backtrace below.
Any help towards debugging this issue would be greatly appreciated.
Please let me know if there is a useful command I can run run to help
diagnose the issue.
(gdb) bt
#0 0x00007f184dcd313c in __pselect (nfds=nfds@entry=15,
readfds=readfds@entry=0x7fff0ba22460,
writefds=writefds@entry=0x7fff0ba224e0, exceptfds=exceptfds@entry=0x0,
timeout=<optimized out>,
timeout@entry=0x7fff0ba22a80, sigmask=sigmask@entry=0x0) at
../sysdeps/unix/sysv/linux/pselect.c:77
#1 0x00000000005dbeb9 in xg_select (fds_lim=15,
rfds=rfds@entry=0x7fff0ba22aa0, wfds=wfds@entry=0x7fff0ba22b20,
efds=efds@entry=0x0, timeout=timeout@entry=0x7fff0ba22a80,
sigmask=sigmask@entry=0x0)
at ../../src/xgselect.c:114
#2 0x00000000005a2669 in wait_reading_process_output
(time_limit=time_limit@entry=0, nsecs=nsecs@entry=0,
read_kbd=read_kbd@entry=-1, do_display=true, wait_for_cell=12327986,
wait_proc=wait_proc@entry=0x0, just_wait_proc=0) at
../../src/process.c:4606
#3 0x00000000004f3eb1 in read_decoded_event_from_main_queue
(end_time=0x0, used_mouse_menu=0x7fff0ba232eb, kbp=<synthetic
pointer>) at ../../src/keyboard.c:3907
#4 0x00000000004f3eb1 in read_decoded_event_from_main_queue
(used_mouse_menu=0x7fff0ba232eb, local_getcjmp=0x7fff0ba23040,
end_time=0x0) at ../../src/keyboard.c:2247
#5 0x00000000004f3eb1 in read_decoded_event_from_main_queue
(end_time=end_time@entry=0x0,
local_getcjmp=local_getcjmp@entry=0x7fff0ba23040,
prev_event=prev_event@entry=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7fff0ba232eb) at
../../src/keyboard.c:2310
#6 0x00000000004f7984 in read_char (commandflag=1,
map=map@entry=80441558, prev_event=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7fff0ba232eb,
end_time=end_time@entry=0x0) at ../../src/keyboard.c:2896
#7 0x00000000004f8a48 in read_key_sequence
(keybuf=keybuf@entry=0x7fff0ba233f0, prompt=12327986,
dont_downcase_last=dont_downcase_last@entry=false,
can_return_switch_frame=can_return_switch_frame@entry=true,
fix_current_buffer=fix_current_buffer@entry=true,
prevent_redisplay=prevent_redisplay@entry=false, bufsize=30) at
../../src/keyboard.c:9089
#8 0x00000000004fa84e in command_loop_1 () at ../../src/keyboard.c:1453
#9 0x000000000055fd47 in internal_condition_case
(bfun=bfun@entry=0x4fa630 <command_loop_1>, handlers=<optimized out>,
hfun=hfun@entry=0x4f1180 <cmd_error>) at ../../src/eval.c:1348
#10 0x00000000004ec602 in command_loop_2
(ignore=ignore@entry=12327986) at ../../src/keyboard.c:1178
#11 0x000000000055fc2b in internal_catch (tag=12375458,
func=func@entry=0x4ec5e0 <command_loop_2>, arg=12327986) at
../../src/eval.c:1112
#12 0x00000000004f0d43 in recursive_edit_1 () at ../../src/keyboard.c:1157
#13 0x00000000004f0d43 in recursive_edit_1 () at ../../src/keyboard.c:778
#14 0x00000000004f1098 in Frecursive_edit () at ../../src/keyboard.c:849
#15 0x0000000000418537 in main (argc=<optimized out>,
argv=0x7fff0ba23758) at ../../src/emacs.c:1642
(gdb) bt
#0 0x00007f67c0942a0d in __libc_recv (fd=3,
buf=buf@entry=0x7fffb54676b0, n=n@entry=8192, flags=flags@entry=0) at
../sysdeps/unix/sysv/linux/x86_64/recv.c:29
#1 0x0000000000401ce0 in recv (__flags=0, __n=8192,
__buf=0x7fffb54676b0, __fd=<optimized out>) at
/usr/include/bits/socket2.h:44
#2 main (argc=3, argv=0x7fffb54697d8) at ../../lib-src/emacsclient.c:1742
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-08 13:00 Need help debugging Emacs: emacsclient will not draw its contents sometimes Jon Dufresne
@ 2015-09-08 13:28 ` Tassilo Horn
2015-09-08 17:18 ` Eli Zaretskii
1 sibling, 0 replies; 26+ messages in thread
From: Tassilo Horn @ 2015-09-08 13:28 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
Jon Dufresne <jon.dufresne@gmail.com> writes:
Hi Jon,
> _Sometimes the emacsclient frame will not draw its contents_, leaving
> Emacs in a useless state. This only occurs after the Emacs daemon has
> been running for hours and has already successfully started many
> emacsclients. When this occurs, my window manager shows that the
> program is running and has drawn an outline of where Emacs should be,
> but there are no contents.
Oh, last week I had that situation, too. I executed "emacsclient -c
file" on the command line and apparently nothing happened. I'm not
exactly sure anymore but I think there were not even window decorations.
However, when I entered the Gnome 3 overview where you get a quick
preview of all your X windows, one empty emacs frame was shown.
> After the first occurrence, all new emacsclients will suffer the same
> fate and will not draw their contents. To Emacs return to a useful
> state, I restart the Emacs daemon. This means I lose the open buffers
> of my currently running Emacs.
That's different to my case. I think I could quit the problematic
window from the Gnome 3 overview which also made emacsclient return, and
then the same invocation again resulted in a correctly drawn window.
But that occurred only exactly once so far and I have no receipe, too.
In contrast to Jon, I don't run emacs as a daemon but I have
(unless (server-running-p)
(server-start))
in my ~/.emacs.
Bye,
Tassilo
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-08 13:00 Need help debugging Emacs: emacsclient will not draw its contents sometimes Jon Dufresne
2015-09-08 13:28 ` Tassilo Horn
@ 2015-09-08 17:18 ` Eli Zaretskii
2015-09-08 18:58 ` Jon Dufresne
1 sibling, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-08 17:18 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
> Date: Tue, 8 Sep 2015 06:00:25 -0700
> From: Jon Dufresne <jon.dufresne@gmail.com>
>
> I run Emacs using the Emacs daemon. I regularly connect to the daemon
> with emacsclient. Frequently, the client is started from an external
> program, such as during a mercurial commit. _Sometimes the emacsclient
> frame will not draw its contents_, leaving Emacs in a useless state.
> This only occurs after the Emacs daemon has been running for hours and
> has already successfully started many emacsclients. When this occurs,
> my window manager shows that the program is running and has drawn an
> outline of where Emacs should be, but there are no contents. After the
> first occurrence, all new emacsclients will suffer the same fate and
> will not draw their contents. To Emacs return to a useful state, I
> restart the Emacs daemon. This means I lose the open buffers of my
> currently running Emacs.
>
> Unfortunately, as I can't reliably reproduce this on demand, it is
> difficult and time consuming to tests different versions of init.el.
>
> Emacs version:
> GNU Emacs 24.5.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.16.2) of
> 2015-04-22 on buildhw-10.phx2.fedoraproject.org
>
> I have attached a debugger to the running Emacs after this has
> occurred. I see the following backtrace below.
The backtrace shows that Emacs is idle, waiting for input, which is
normal. Try typing "finish" repeatedly to step out of the functions
shown in the backtrace, until some of them doesn't return. Then tell
here which one didn't.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-08 17:18 ` Eli Zaretskii
@ 2015-09-08 18:58 ` Jon Dufresne
2015-09-08 19:16 ` Eli Zaretskii
0 siblings, 1 reply; 26+ messages in thread
From: Jon Dufresne @ 2015-09-08 18:58 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On Tue, Sep 8, 2015 at 10:18 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> The backtrace shows that Emacs is idle, waiting for input, which is
> normal. Try typing "finish" repeatedly to step out of the functions
> shown in the backtrace, until some of them doesn't return. Then tell
> here which one didn't.
Thanks!
I have tried this. The results are below. The client process hung on
the first "finish" while the server process took a few more commands
but eventually hung in command_loop_1(). Any thoughts on this?
Cheers,
Jon
Client:
(gdb) bt
#0 0x00000030d8b03a0d in __libc_recv (fd=3,
buf=buf@entry=0x7ffd1328bf60, n=n@entry=8192, flags=flags@entry=0) at
../sysdeps/unix/sysv/linux/x86_64/recv.c:29
#1 0x0000000000401ce0 in recv (__flags=0, __n=8192,
__buf=0x7ffd1328bf60, __fd=<optimized out>) at
/usr/include/bits/socket2.h:44
#2 main (argc=3, argv=0x7ffd1328e088) at ../../lib-src/emacsclient.c:1742
(gdb) finish
Run till exit from #0 0x00000030d8b03a0d in __libc_recv (fd=3,
buf=buf@entry=0x7ffd1328bf60, n=n@entry=8192, flags=flags@entry=0) at
../sysdeps/unix/sysv/linux/x86_64/recv.c:29
Server:
(gdb) bt
#0 0x00000030d8af913c in __pselect (nfds=nfds@entry=17,
readfds=readfds@entry=0x7ffdd014e210,
writefds=writefds@entry=0x7ffdd014e290, exceptfds=exceptfds@entry=0x0,
timeout=<optimized out>, timeout@entry=0x7ffdd014e830,
sigmask=sigmask@entry=0x0) at ../sysdeps/unix/sysv/linux/pselect.c:77
#1 0x00000000005dbeb9 in xg_select (fds_lim=17,
rfds=rfds@entry=0x7ffdd014e850, wfds=wfds@entry=0x7ffdd014e8d0,
efds=efds@entry=0x0, timeout=timeout@entry=0x7ffdd014e830,
sigmask=sigmask@entry=0x0) at ../../src/xgselect.c:114
#2 0x00000000005a2669 in wait_reading_process_output
(time_limit=time_limit@entry=0, nsecs=nsecs@entry=0,
read_kbd=read_kbd@entry=-1, do_display=true, wait_for_cell=12327986,
wait_proc=wait_proc@entry=0x0, just_wait_proc=0) at
../../src/process.c:4606
#3 0x00000000004f3eb1 in read_decoded_event_from_main_queue
(end_time=0x0, used_mouse_menu=0x7ffdd014f09b, kbp=<synthetic
pointer>) at ../../src/keyboard.c:3907
#4 0x00000000004f3eb1 in read_decoded_event_from_main_queue
(used_mouse_menu=0x7ffdd014f09b, local_getcjmp=0x7ffdd014edf0,
end_time=0x0) at ../../src/keyboard.c:2247
#5 0x00000000004f3eb1 in read_decoded_event_from_main_queue
(end_time=end_time@entry=0x0,
local_getcjmp=local_getcjmp@entry=0x7ffdd014edf0,
prev_event=prev_event@entry=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7ffdd014f09b) at
../../src/keyboard.c:2310
#6 0x00000000004f7984 in read_char (commandflag=1,
map=map@entry=63963270, prev_event=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7ffdd014f09b,
end_time=end_time@entry=0x0)
at ../../src/keyboard.c:2896
#7 0x00000000004f8a48 in read_key_sequence
(keybuf=keybuf@entry=0x7ffdd014f1a0, prompt=12327986,
dont_downcase_last=dont_downcase_last@entry=false,
can_return_switch_frame=can_return_switch_frame@entry=true,
fix_current_buffer=fix_current_buffer@entry=true,
prevent_redisplay=prevent_redisplay@entry=false, bufsize=30) at
../../src/keyboard.c:9089
#8 0x00000000004fa84e in command_loop_1 () at ../../src/keyboard.c:1453
#9 0x000000000055fd47 in internal_condition_case
(bfun=bfun@entry=0x4fa630 <command_loop_1>, handlers=<optimized out>,
hfun=hfun@entry=0x4f1180 <cmd_error>) at ../../src/eval.c:1348
#10 0x00000000004ec602 in command_loop_2
(ignore=ignore@entry=12327986) at ../../src/keyboard.c:1178
#11 0x000000000055fc2b in internal_catch (tag=12375458,
func=func@entry=0x4ec5e0 <command_loop_2>, arg=12327986) at
../../src/eval.c:1112
#12 0x00000000004f0d43 in recursive_edit_1 () at ../../src/keyboard.c:1157
#13 0x00000000004f0d43 in recursive_edit_1 () at ../../src/keyboard.c:778
#14 0x00000000004f1098 in Frecursive_edit () at ../../src/keyboard.c:849
#15 0x0000000000418537 in main (argc=<optimized out>,
argv=0x7ffdd014f508) at ../../src/emacs.c:1642
(gdb) finish
Run till exit from #0 0x00000030d8af913c in __pselect
(nfds=nfds@entry=17, readfds=readfds@entry=0x7ffdd014e210,
writefds=writefds@entry=0x7ffdd014e290, exceptfds=exceptfds@entry=0x0,
timeout=<optimized out>, timeout@entry=0x7ffdd014e830,
sigmask=sigmask@entry=0x0) at ../sysdeps/unix/sysv/linux/pselect.c:77
xg_select (fds_lim=17, rfds=rfds@entry=0x7ffdd014e850,
wfds=wfds@entry=0x7ffdd014e8d0, efds=efds@entry=0x0,
timeout=timeout@entry=0x7ffdd014e830, sigmask=sigmask@entry=0x0)
at ../../src/xgselect.c:117
117 if (nfds < 0)
Value returned is $1 = 0
(gdb) finish
Run till exit from #0 xg_select (fds_lim=17,
rfds=rfds@entry=0x7ffdd014e850, wfds=wfds@entry=0x7ffdd014e8d0,
efds=efds@entry=0x0, timeout=timeout@entry=0x7ffdd014e830,
sigmask=sigmask@entry=0x0) at ../../src/xgselect.c:117
wait_reading_process_output (time_limit=time_limit@entry=0,
nsecs=nsecs@entry=0, read_kbd=read_kbd@entry=-1, do_display=true,
wait_for_cell=12327986, wait_proc=wait_proc@entry=0x0,
just_wait_proc=0) at ../../src/process.c:4620
4620 if (nfds == 0)
Value returned is $2 = 0
(gdb) finish
Run till exit from #0 wait_reading_process_output
(time_limit=time_limit@entry=0, nsecs=nsecs@entry=0,
read_kbd=read_kbd@entry=-1, do_display=true, wait_for_cell=12327986,
wait_proc=wait_proc@entry=0x0, just_wait_proc=0) at ../../src/process.c:4620
0x00000000004f3eb1 in kbd_buffer_get_event (end_time=0x0,
used_mouse_menu=0x7ffdd014f09b, kbp=<synthetic pointer>) at
../../src/keyboard.c:3907
3907 wait_reading_process_output (0, 0, -1, do_display, Qnil, NULL, 0);
Value returned is $3 = true
(gdb) finish
Run till exit from #0 0x00000000004f3eb1 in kbd_buffer_get_event
(end_time=0x0, used_mouse_menu=0x7ffdd014f09b, kbp=<synthetic
pointer>) at ../../src/keyboard.c:3907
2247 c = kbd_buffer_get_event (&kb, used_mouse_menu, end_time);
(gdb) finish
Run till exit from #0 read_event_from_main_queue
(used_mouse_menu=0x7ffdd014f09b, local_getcjmp=0x7ffdd014edf0,
end_time=0x0) at ../../src/keyboard.c:2247
2320 struct frame *frame = XFRAME (selected_frame);
(gdb) finish
Run till exit from #0 read_decoded_event_from_main_queue
(end_time=end_time@entry=0x0,
local_getcjmp=local_getcjmp@entry=0x7ffdd014edf0,
prev_event=prev_event@entry=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7ffdd014f09b) at
../../src/keyboard.c:2320
read_char (commandflag=1, map=map@entry=63963270, prev_event=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7ffdd014f09b,
end_time=end_time@entry=0x0) at ../../src/keyboard.c:2898
2898 if (NILP(c) && end_time &&
Value returned is $4 = 75183542
(gdb) finish
Run till exit from #0 read_char (commandflag=1,
map=map@entry=63963270, prev_event=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7ffdd014f09b,
end_time=end_time@entry=0x0)
at ../../src/keyboard.c:2898
0x00000000004f8a48 in read_key_sequence
(keybuf=keybuf@entry=0x7ffdd014f1a0, prompt=12327986,
dont_downcase_last=dont_downcase_last@entry=false,
can_return_switch_frame=can_return_switch_frame@entry=true,
fix_current_buffer=fix_current_buffer@entry=true,
prevent_redisplay=prevent_redisplay@entry=false, bufsize=30)
at ../../src/keyboard.c:9089
9089 key = read_char (prevent_redisplay ? -2 : NILP (prompt),
Value returned is $5 = 75183542
(gdb) finish
Run till exit from #0 0x00000000004f8a48 in read_key_sequence
(keybuf=keybuf@entry=0x7ffdd014f1a0, prompt=12327986,
dont_downcase_last=dont_downcase_last@entry=false,
can_return_switch_frame=can_return_switch_frame@entry=true,
fix_current_buffer=fix_current_buffer@entry=true,
prevent_redisplay=prevent_redisplay@entry=false, bufsize=30)
at ../../src/keyboard.c:9089
0x00000000004fa84e in command_loop_1 () at ../../src/keyboard.c:1453
1453 i = read_key_sequence (keybuf, sizeof keybuf / sizeof keybuf[0],
Value returned is $6 = 1
(gdb) finish
Run till exit from #0 0x00000000004fa84e in command_loop_1 () at
../../src/keyboard.c:1453
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-08 18:58 ` Jon Dufresne
@ 2015-09-08 19:16 ` Eli Zaretskii
2015-09-09 22:29 ` Jon Dufresne
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-08 19:16 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
> Date: Tue, 8 Sep 2015 11:58:35 -0700
> From: Jon Dufresne <jon.dufresne@gmail.com>
> Cc: emacs-devel@gnu.org
>
> On Tue, Sep 8, 2015 at 10:18 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> > The backtrace shows that Emacs is idle, waiting for input, which is
> > normal. Try typing "finish" repeatedly to step out of the functions
> > shown in the backtrace, until some of them doesn't return. Then tell
> > here which one didn't.
>
> Thanks!
>
> I have tried this. The results are below. The client process hung on
> the first "finish" while the server process took a few more commands
> but eventually hung in command_loop_1(). Any thoughts on this?
The "hang" in command_loop_1 is not a hang -- that's the main loop
where Emacs does its job.
So now the question is why you don't see the display. Please step
through command_loop_1 until it calls read_key_sequence, step into
that, then step until it calls read_char, and step through read_char
until it calls redisplay_internal. Once you are inside
redisplay_internal, step through it and show which lines are being
executed.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-08 19:16 ` Eli Zaretskii
@ 2015-09-09 22:29 ` Jon Dufresne
2015-09-10 15:26 ` Eli Zaretskii
0 siblings, 1 reply; 26+ messages in thread
From: Jon Dufresne @ 2015-09-09 22:29 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On Tue, Sep 8, 2015 at 12:16 PM, Eli Zaretskii <eliz@gnu.org> wrote:
> So now the question is why you don't see the display. Please step
> through command_loop_1 until it calls read_key_sequence, step into
> that, then step until it calls read_char, and step through read_char
> until it calls redisplay_internal. Once you are inside
> redisplay_internal, step through it and show which lines are being
> executed.
Thanks. I'm no expert on gdb, but I believe I have followed your
suggestion. Below is the output from gdb by stepping through
redisplay_internal from beginning to end. Let me know what you think.
Any insight as to why the contents are not drawn?
(gdb) n
redisplay_internal () at ../../src/xdisp.c:13482
13482 {
(gdb) n
13507 if (FRAME_INITIAL_P (SELECTED_FRAME ())
(gdb) n
2430 if (! VECTORLIKEP (a))
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
13507 if (FRAME_INITIAL_P (SELECTED_FRAME ())
(gdb) n
13508 || !NILP (Vinhibit_redisplay))
(gdb) n
13483 struct window *w = XWINDOW (selected_window);
(gdb) n
13517 if (!fr->glyphs_initialized_p)
(gdb) n
13521 if (popup_activated ())
(gdb) n
13526 if (redisplaying_p)
(gdb) n
2894 return specpdl_ptr - specpdl;
(gdb) n
13532 record_unwind_protect_void (unwind_redisplay);
(gdb) n
2894 return specpdl_ptr - specpdl;
(gdb) n
13532 record_unwind_protect_void (unwind_redisplay);
(gdb) n
13534 specbind (Qinhibit_free_realized_faces, Qnil);
(gdb) n
13533 redisplaying_p = 1;
(gdb) n
13534 specbind (Qinhibit_free_realized_faces, Qnil);
(gdb) n
13537 record_in_backtrace (Qredisplay_internal, &Qnil, 0);
(gdb) n
13539 FOR_EACH_FRAME (tail, frame)
(gdb) n
13540 XFRAME (frame)->already_hscrolled_p = 0;
(gdb) n
13539 FOR_EACH_FRAME (tail, frame)
(gdb) n
13540 XFRAME (frame)->already_hscrolled_p = 0;
(gdb) n
13539 FOR_EACH_FRAME (tail, frame)
(gdb) n
13540 XFRAME (frame)->already_hscrolled_p = 0;
(gdb) n
13539 FOR_EACH_FRAME (tail, frame)
(gdb) n
11650 init_iterator (&it, XWINDOW (f->selected_window), -1, -1,
(gdb) n
14044 STOP_POLLING;
(gdb) n
11650 init_iterator (&it, XWINDOW (f->selected_window), -1, -1,
(gdb) n
13555 if (face_change_count)
(gdb) n
13547 last_escape_glyph_frame = NULL;
(gdb) n
13548 last_escape_glyph_face_id = (1 << FACE_ID_BITS);
(gdb) n
13549 last_glyphless_glyph_frame = NULL;
(gdb) n
13550 last_glyphless_glyph_face_id = (1 << FACE_ID_BITS);
(gdb) n
13555 if (face_change_count)
(gdb) n
13558 if ((FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf))
(gdb) n
13576 FOR_EACH_FRAME (tail, frame)
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
13580 if (FRAME_VISIBLE_P (f))
(gdb) n
13582 ++number_of_visible_frames;
(gdb) n
13584 if (f->fonts_changed)
(gdb) n
13591 if (f != sf && f->cursor_type_changed)
(gdb) n
13594 clear_desired_matrices (f);
(gdb) n
13576 FOR_EACH_FRAME (tail, frame)
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
13580 if (FRAME_VISIBLE_P (f))
(gdb) n
13582 ++number_of_visible_frames;
(gdb) n
13584 if (f->fonts_changed)
(gdb) n
13591 if (f != sf && f->cursor_type_changed)
(gdb) n
13594 clear_desired_matrices (f);
(gdb) n
13576 FOR_EACH_FRAME (tail, frame)
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
13580 if (FRAME_VISIBLE_P (f))
(gdb) n
13582 ++number_of_visible_frames;
(gdb) n
13584 if (f->fonts_changed)
(gdb) n
13591 if (f != sf && f->cursor_type_changed)
(gdb) n
13594 clear_desired_matrices (f);
(gdb) n
13576 FOR_EACH_FRAME (tail, frame)
(gdb) n
13598 do_pending_window_change (1);
(gdb) n
13602 if (WINDOWP (selected_window) && (w = XWINDOW
(selected_window)) != sw)
(gdb) n
2430 if (! VECTORLIKEP (a))
(gdb) n
13602 if (WINDOWP (selected_window) && (w = XWINDOW
(selected_window)) != sw)
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
11236 if (frame_garbaged)
(gdb) n
13609 if (NILP (Vmemory_full))
(gdb) n
11689 bool all_windows = windows_or_buffers_changed || update_mode_lines;
(gdb) n
11690 bool some_windows = REDISPLAY_SOME_P ();
(gdb) n
11695 tooltip_frame = tip_frame;
(gdb) n
11700 if (FUNCTIONP (Vpre_redisplay_function))
(gdb) n
11695 tooltip_frame = tip_frame;
(gdb) n
703 LISP_MACRO_DEFUN (XTYPE, enum Lisp_Type, (Lisp_Object a), (a))
(gdb) n
4569 if (SYMBOLP (object) && !NILP (Ffboundp (object)))
(gdb) n
2430 if (! VECTORLIKEP (a))
(gdb) n
2422 return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK))
(gdb) n
4585 if (SUBRP (object))
(gdb) n
4587 else if (COMPILEDP (object))
(gdb) n
11702 Lisp_Object windows = all_windows ? Qt : Qnil;
(gdb) n
11718 safe__call1 (true, Vpre_redisplay_function, windows);
(gdb) n
11725 if (all_windows)
(gdb) n
11817 struct frame *sf = SELECTED_FRAME ();
(gdb) n
2430 if (! VECTORLIKEP (a))
(gdb) n
11817 struct frame *sf = SELECTED_FRAME ();
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
11817 struct frame *sf = SELECTED_FRAME ();
(gdb) n
11846 if (inhibit_menubar_update)
(gdb) n
11977 if (do_update)
(gdb) n
13612 reconsider_clip_changes (w);
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
13615 match_p = XBUFFER (w->contents) == current_buffer;
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
13615 match_p = XBUFFER (w->contents) == current_buffer;
(gdb) n
13616 if (match_p)
(gdb) n
13619 if ((SAVE_MODIFF < MODIFF) != w->last_had_star)
(gdb) n
13622 if (mode_line_update_needed (w))
(gdb) n
13628 if (current_buffer->clip_changed)
(gdb) n
13637 if ((!NILP (echo_area_buffer[0]) &&
!display_last_displayed_message_p)
(gdb) n
13645 int window_height_changed_p = echo_area_display (0);
(gdb) n
13648 update_miniwindow_p = true;
(gdb) n
13656 if (!display_last_displayed_message_p)
(gdb) n
13648 update_miniwindow_p = true;
(gdb) n
13656 if (!display_last_displayed_message_p)
(gdb) n
13657 message_cleared_p = 0;
(gdb) n
13659 if (window_height_changed_p)
(gdb) n
13650 must_finish = 1;
(gdb) n
13683 if (windows_or_buffers_changed && !update_mode_lines)
(gdb) n
13692 if (overlay_arrows_changed_p ())
(gdb) n
13697 consider_all_windows_p = (update_mode_lines
(gdb) n
13698 || windows_or_buffers_changed);
(gdb) n
13704 AINC (Vredisplay__all_windows_cause, windows_or_buffers_changed);
(gdb) n
2394 return VECTORLIKEP (x) && ! (ASIZE (x) & PSEUDOVECTOR_FLAG);
(gdb) n
1368 return XVECTOR (array)->header.size;
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
2394 return VECTORLIKEP (x) && ! (ASIZE (x) & PSEUDOVECTOR_FLAG);
(gdb) n
13704 AINC (Vredisplay__all_windows_cause, windows_or_buffers_changed);
(gdb) n
13705 AINC (Vredisplay__mode_lines_cause, update_mode_lines);
(gdb) n
2394 return VECTORLIKEP (x) && ! (ASIZE (x) & PSEUDOVECTOR_FLAG);
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
1368 return XVECTOR (array)->header.size;
(gdb) n
13705 AINC (Vredisplay__mode_lines_cause, update_mode_lines);
(gdb) n
13711 tlbufpos = this_line_start_pos;
(gdb) n
13714 && CHARPOS (tlbufpos) > 0
(gdb) n
13715 && !w->update_mode_line
(gdb) n
13716 && !current_buffer->clip_changed
(gdb) n
13717 && !current_buffer->prevent_redisplay_optimizations_p
(gdb) n
13718 && FRAME_VISIBLE_P (XFRAME (w->frame))
(gdb) n
13719 && !FRAME_OBSCURED_P (XFRAME (w->frame))
(gdb) n
13720 && !XFRAME (w->frame)->cursor_type_changed
(gdb) n
13723 && match_p
(gdb) n
13724 && !w->force_start
(gdb) n
13725 && !w->optional_new_start
(gdb) n
13727 && PT >= CHARPOS (tlbufpos)
(gdb) n
13728 && PT <= Z - CHARPOS (tlendpos)
(gdb) n
13712 tlendpos = this_line_end_pos;
(gdb) n
13728 && PT <= Z - CHARPOS (tlendpos)
(gdb) n
13712 tlendpos = this_line_end_pos;
(gdb) n
13166 if (window_outdated (w))
(gdb) n
13711 tlbufpos = this_line_start_pos;
(gdb) n
13712 tlendpos = this_line_end_pos;
(gdb) n
13166 if (window_outdated (w))
(gdb) n
13734 if (CHARPOS (tlbufpos) > BEGV
(gdb) n
13735 && FETCH_BYTE (BYTEPOS (tlbufpos) - 1) != '\n'
(gdb) n
13740 else if (window_outdated (w) || MINI_WINDOW_P (w))
(gdb) n
13842 else if (/* Cursor position hasn't changed. */
(gdb) n
13848 && 0 <= w->cursor.vpos
(gdb) n
13849 && w->cursor.vpos < WINDOW_TOTAL_LINES (w))
(gdb) n
13851 if (!must_finish)
(gdb) n
14036 if (sf->fonts_changed)
(gdb) n
14042 if (interrupt_input)
(gdb) n
14043 unrequest_sigio ();
(gdb) n
14044 STOP_POLLING;
(gdb) n
14046 if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf))
(gdb) n
14048 if (hscroll_windows (selected_window))
(gdb) n
13078 int hscrolled_p = hscroll_window_tree (window);
(gdb) n
13079 if (hscrolled_p)
(gdb) n
14051 XWINDOW (selected_window)->must_be_updated_p = true;
(gdb) n
14052 pending = update_frame (sf, 0, 0);
(gdb) n
14051 XWINDOW (selected_window)->must_be_updated_p = true;
(gdb) n
14052 pending = update_frame (sf, 0, 0);
(gdb) n
14061 mini_window = FRAME_MINIBUF_WINDOW (sf);
(gdb) n
14053 sf->cursor_type_changed = 0;
(gdb) n
14052 pending = update_frame (sf, 0, 0);
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
14064 if (mini_frame != sf && FRAME_WINDOW_P (mini_frame))
(gdb) n
14076 if (pending)
(gdb) n
14094 if (!consider_all_windows_p)
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
14098 if (XBUFFER (w->contents)->text->redisplay
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
14098 if (XBUFFER (w->contents)->text->redisplay
(gdb) n
14103 mark_window_display_accurate_1 (w, 1);
(gdb) n
14106 update_overlay_arrows (1);
(gdb) n
14108 if (FRAME_TERMINAL (sf)->frame_up_to_date_hook != 0)
(gdb) n
14109 FRAME_TERMINAL (sf)->frame_up_to_date_hook (sf);
(gdb) n
14112 update_mode_lines = 0;
(gdb) n
14113 windows_or_buffers_changed = 0;
(gdb) n
14120 if (interrupt_input)
(gdb) n
14121 request_sigio ();
(gdb) n
14122 RESUME_POLLING;
(gdb) n
14130 if (!pending)
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14136 if (XFRAME (frame)->visible)
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14136 if (XFRAME (frame)->visible)
(gdb) n
14137 new_count++;
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14137 new_count++;
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14136 if (XFRAME (frame)->visible)
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14136 if (XFRAME (frame)->visible)
(gdb) n
14137 new_count++;
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14137 new_count++;
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14136 if (XFRAME (frame)->visible)
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14136 if (XFRAME (frame)->visible)
(gdb) n
14137 new_count++;
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14137 new_count++;
(gdb) n
14134 FOR_EACH_FRAME (tail, frame)
(gdb) n
14140 if (new_count != number_of_visible_frames)
(gdb) n
14145 do_pending_window_change (1);
(gdb) n
14149 if ((windows_or_buffers_changed && !pending)
(gdb) n
14150 || (WINDOWP (selected_window) && (w = XWINDOW
(selected_window)) != sw))
(gdb) n
2430 if (! VECTORLIKEP (a))
(gdb) n
14150 || (WINDOWP (selected_window) && (w = XWINDOW
(selected_window)) != sw))
(gdb) n
704 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
(gdb) n
14150 || (WINDOWP (selected_window) && (w = XWINDOW
(selected_window)) != sw))
(gdb) n
14159 if (clear_face_cache_count > CLEAR_FACE_CACHE_COUNT)
(gdb) n
14166 if (clear_image_cache_count > CLEAR_IMAGE_CACHE_COUNT)
(gdb) n
14177 if (interrupt_input && interrupts_deferred)
(gdb) n
14180 unbind_to (count, Qnil);
(gdb) n
14182 }
(gdb) n
read_char (commandflag=1, map=map@entry=87871094, prev_event=12327986,
used_mouse_menu=used_mouse_menu@entry=0x7fff013f585b,
end_time=end_time@entry=0x0) at ../../src/keyboard.c:2822
2822 if (!detect_input_pending_run_timers (0))
(gdb)
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-09 22:29 ` Jon Dufresne
@ 2015-09-10 15:26 ` Eli Zaretskii
2015-09-10 18:20 ` Jon Dufresne
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-10 15:26 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
> Date: Wed, 9 Sep 2015 15:29:18 -0700
> From: Jon Dufresne <jon.dufresne@gmail.com>
> Cc: emacs-devel@gnu.org
>
> On Tue, Sep 8, 2015 at 12:16 PM, Eli Zaretskii <eliz@gnu.org> wrote:
> > So now the question is why you don't see the display. Please step
> > through command_loop_1 until it calls read_key_sequence, step into
> > that, then step until it calls read_char, and step through read_char
> > until it calls redisplay_internal. Once you are inside
> > redisplay_internal, step through it and show which lines are being
> > executed.
>
> Thanks. I'm no expert on gdb, but I believe I have followed your
> suggestion. Below is the output from gdb by stepping through
> redisplay_internal from beginning to end. Let me know what you think.
> Any insight as to why the contents are not drawn?
This shows that Emacs examined the frames and windows, and decided
that nothing requires to be redrawn. Most redisplay cycles are like
that, so this trace doesn't yet point to any problem.
If you type "M-x" into the (empty, AFAIU) client frame, does Emacs
display the "M-x" prompt? Does it also redisplay some of the frame?
What happens if you type "M-x redraw-display RET"? does Emacs display
anything?
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-10 15:26 ` Eli Zaretskii
@ 2015-09-10 18:20 ` Jon Dufresne
2015-09-10 18:46 ` Eli Zaretskii
0 siblings, 1 reply; 26+ messages in thread
From: Jon Dufresne @ 2015-09-10 18:20 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On Thu, Sep 10, 2015 at 8:26 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> This shows that Emacs examined the frames and windows, and decided
> that nothing requires to be redrawn. Most redisplay cycles are like
> that, so this trace doesn't yet point to any problem.
For clarification on what I see, see the image: https://i.imgur.com/HWrwtUm.png
>
> If you type "M-x" into the (empty, AFAIU) client frame, does Emacs
> display the "M-x" prompt?
In the empty frame, no.
I sometimes also have an existing client frame that continues to work
normally. Typing M-x into this frame works normally.
> Does it also redisplay some of the frame?
No.
> What happens if you type "M-x redraw-display RET"? does Emacs display
> anything?
Nothing. This is true if I type "M-x redraw-display RET" with the
drawn frame focused or the non-drawn frame focused. Would it help to
set a breakpoint before typing this command? If so where would you
expect something interesting?
Cheers,
Jon
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-10 18:20 ` Jon Dufresne
@ 2015-09-10 18:46 ` Eli Zaretskii
2015-09-10 18:52 ` Jon Dufresne
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-10 18:46 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
> Date: Thu, 10 Sep 2015 11:20:20 -0700
> From: Jon Dufresne <jon.dufresne@gmail.com>
> Cc: emacs-devel@gnu.org
>
> On Thu, Sep 10, 2015 at 8:26 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> > This shows that Emacs examined the frames and windows, and decided
> > that nothing requires to be redrawn. Most redisplay cycles are like
> > that, so this trace doesn't yet point to any problem.
>
> For clarification on what I see, see the image: https://i.imgur.com/HWrwtUm.png
Is the background of the frame correct? That is, if it were
completely displayed, would you expect the background color to remain
as it is shown in that screenshot?
> > What happens if you type "M-x redraw-display RET"? does Emacs display
> > anything?
>
> Nothing. This is true if I type "M-x redraw-display RET" with the
> drawn frame focused or the non-drawn frame focused. Would it help to
> set a breakpoint before typing this command? If so where would you
> expect something interesting?
I will need to think a bit about that.
Thanks for the info.
Do you have a way to try this with a development snapshot of Emacs 25?
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-10 18:46 ` Eli Zaretskii
@ 2015-09-10 18:52 ` Jon Dufresne
2015-09-11 7:26 ` Eli Zaretskii
0 siblings, 1 reply; 26+ messages in thread
From: Jon Dufresne @ 2015-09-10 18:52 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On Thu, Sep 10, 2015 at 11:46 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> Is the background of the frame correct? That is, if it were
> completely displayed, would you expect the background color to remain
> as it is shown in that screenshot?
No. I expect the background of the frame to be white. The color you
see is from the desktop background going through a transparent outline
of where Emacs should be. This screenshot is from the overview of
GNOME 3.
> Do you have a way to try this with a development snapshot of Emacs 25?
I'll give this a shot and report if I encounter the issue again. Thanks.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-10 18:52 ` Jon Dufresne
@ 2015-09-11 7:26 ` Eli Zaretskii
2015-09-11 16:47 ` Jon Dufresne
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-11 7:26 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
> Date: Thu, 10 Sep 2015 11:52:03 -0700
> From: Jon Dufresne <jon.dufresne@gmail.com>
> Cc: emacs-devel@gnu.org
>
> On Thu, Sep 10, 2015 at 11:46 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> > Is the background of the frame correct? That is, if it were
> > completely displayed, would you expect the background color to remain
> > as it is shown in that screenshot?
>
> No. I expect the background of the frame to be white. The color you
> see is from the desktop background going through a transparent outline
> of where Emacs should be. This screenshot is from the overview of
> GNOME 3.
>
> > Do you have a way to try this with a development snapshot of Emacs 25?
>
> I'll give this a shot and report if I encounter the issue again. Thanks.
Thanks.
One other thing to try is "emacsclient -t", i.e. a text-mode frame.
Does that have the same problem, or does it display buffers as
expected?
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-11 7:26 ` Eli Zaretskii
@ 2015-09-11 16:47 ` Jon Dufresne
2015-09-14 10:09 ` Eli Zaretskii
0 siblings, 1 reply; 26+ messages in thread
From: Jon Dufresne @ 2015-09-11 16:47 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
>> Do you have a way to try this with a development snapshot of Emacs 25?
> I'll give this a shot and report if I encounter the issue again. Thanks.1
After some hours of usage today, the issue was reproduced with a
recent git checkout of Emacs:
"M-x version RET"
GNU Emacs 25.0.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.16.6) of
2015-09-10
git hash: 8aa0386420f9d982b99568f27a5953dfc737640e
> One other thing to try is "emacsclient -t", i.e. a text-mode frame.
> Does that have the same problem, or does it display buffers as
> expected?
I played around with this and found some interesting notes.
Once the issue arises, if I execute "emacsclient -c", "emacsclient -c
filename.txt", "emacsclient -t", or "emacsclient -t filename.txt" from
a new gnome-terminal the frame opens and display correctly as
expected. It appears that only the frames created by mercurial
commands regularly have the issue, and then only sometimes.
If it helps, I execute mercurial commands from gnome-terminal and not
from within Emacs. Sometimes mercurial require an editor. My "~/.hgrc"
has the editor configured to "emacsclient -c". I'm not sure if the
fact that this issue only occurs from mercurial is significant or
merely a coincidence as other than mercurial new emacsclients are
rarely invoked.
If I execute the "emacsclient -c" from a separate terminal (as
mentioned above), then retry the mercurial command, the next frame
displays correctly as expected. It seems this sequence somehow gets
around the issue.
Thanks for the help! If there is any additional information I can
provide to help debug this issue, please let me know.
Cheers,
Jon
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-11 16:47 ` Jon Dufresne
@ 2015-09-14 10:09 ` Eli Zaretskii
2015-09-23 0:51 ` Jon Dufresne
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-14 10:09 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
> Date: Fri, 11 Sep 2015 09:47:59 -0700
> From: Jon Dufresne <jon.dufresne@gmail.com>
> Cc: emacs-devel@gnu.org
>
> Once the issue arises, if I execute "emacsclient -c", "emacsclient -c
> filename.txt", "emacsclient -t", or "emacsclient -t filename.txt" from
> a new gnome-terminal the frame opens and display correctly as
> expected. It appears that only the frames created by mercurial
> commands regularly have the issue, and then only sometimes.
I guess the question is now what does Mercurial do, exactly, to invoke
emacsclient. Can you look at the command line Mercurial passes to it,
for example? Perhaps also log the communications between emacsclient
and the server on the Emacs side, and see what is passed there.
The screenshot you posted seems like the frame was never created
completely, so Emacs doesn't think it should be displaying any text
yet. I wonder why that happens.
> If I execute the "emacsclient -c" from a separate terminal (as
> mentioned above), then retry the mercurial command, the next frame
> displays correctly as expected. It seems this sequence somehow gets
> around the issue.
We need to figure out what kind of "issue" this works around.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-14 10:09 ` Eli Zaretskii
@ 2015-09-23 0:51 ` Jon Dufresne
2015-09-23 6:45 ` Eli Zaretskii
0 siblings, 1 reply; 26+ messages in thread
From: Jon Dufresne @ 2015-09-23 0:51 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On Mon, Sep 14, 2015 at 3:09 AM, Eli Zaretskii <eliz@gnu.org> wrote:
>> Once the issue arises, if I execute "emacsclient -c", "emacsclient -c
>> filename.txt", "emacsclient -t", or "emacsclient -t filename.txt" from
>> a new gnome-terminal the frame opens and display correctly as
>> expected. It appears that only the frames created by mercurial
>> commands regularly have the issue, and then only sometimes.
>
> I guess the question is now what does Mercurial do, exactly, to invoke
> emacsclient. Can you look at the command line Mercurial passes to it,
> for example? Perhaps also log the communications between emacsclient
> and the server on the Emacs side, and see what is passed there.
>
> The screenshot you posted seems like the frame was never created
> completely, so Emacs doesn't think it should be displaying any text
> yet. I wonder why that happens.
>
>> If I execute the "emacsclient -c" from a separate terminal (as
>> mentioned above), then retry the mercurial command, the next frame
>> displays correctly as expected. It seems this sequence somehow gets
>> around the issue.
>
> We need to figure out what kind of "issue" this works around.
I'm at a loss on how to continue diagnosing this issue. I continue to
hit the problem, even with the newer Emacs. Luckily less frequently
than before and it is now easier to resume normal usage, but enough
that it interrupts my flow. Any thoughts on how to possibly gather
more useful information?
Thanks,
Jon
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-23 0:51 ` Jon Dufresne
@ 2015-09-23 6:45 ` Eli Zaretskii
2015-09-27 22:21 ` Mike Kupfer
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-23 6:45 UTC (permalink / raw)
To: Jon Dufresne; +Cc: emacs-devel
> Date: Tue, 22 Sep 2015 17:51:45 -0700
> From: Jon Dufresne <jon.dufresne@gmail.com>
> Cc: emacs-devel@gnu.org
>
> > I guess the question is now what does Mercurial do, exactly, to invoke
> > emacsclient. Can you look at the command line Mercurial passes to it,
> > for example? Perhaps also log the communications between emacsclient
> > and the server on the Emacs side, and see what is passed there.
> >
> > The screenshot you posted seems like the frame was never created
> > completely, so Emacs doesn't think it should be displaying any text
> > yet. I wonder why that happens.
> >
> >> If I execute the "emacsclient -c" from a separate terminal (as
> >> mentioned above), then retry the mercurial command, the next frame
> >> displays correctly as expected. It seems this sequence somehow gets
> >> around the issue.
> >
> > We need to figure out what kind of "issue" this works around.
>
> I'm at a loss on how to continue diagnosing this issue. I continue to
> hit the problem, even with the newer Emacs. Luckily less frequently
> than before and it is now easier to resume normal usage, but enough
> that it interrupts my flow. Any thoughts on how to possibly gather
> more useful information?
I proposed above to look for 2 pieces of information that could
potentially help us. If you can show them, I think it would be good
progress. If you need help with them (i.e. don't know how to get the
information), please tell.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-23 6:45 ` Eli Zaretskii
@ 2015-09-27 22:21 ` Mike Kupfer
2015-09-28 6:39 ` Eli Zaretskii
2016-02-16 1:07 ` Mike Kupfer
0 siblings, 2 replies; 26+ messages in thread
From: Mike Kupfer @ 2015-09-27 22:21 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: Jon Dufresne, emacs-devel
Eli Zaretskii wrote:
> > > I guess the question is now what does Mercurial do, exactly, to invoke
> > > emacsclient. Can you look at the command line Mercurial passes to it,
> > > for example? Perhaps also log the communications between emacsclient
> > > and the server on the Emacs side, and see what is passed there.
I occasionally run into the same or a very similar issue as Jon and
Tassilo. It's not reproducible on demand and doesn't happen often, so
I've been ignoring it. (My usual workaround is to minimize the useless
frame and rerun emacsclient. Like Tassilo, I run (server-start) at
startup, rather than running Emacs as a daemon.)
If it happens again, I can certainly tell you how emacsclient got
invoked. But I could use a clue about how to log communication between
emacsclient and the server.
thanks,
mike
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-27 22:21 ` Mike Kupfer
@ 2015-09-28 6:39 ` Eli Zaretskii
2016-02-16 1:07 ` Mike Kupfer
1 sibling, 0 replies; 26+ messages in thread
From: Eli Zaretskii @ 2015-09-28 6:39 UTC (permalink / raw)
To: Mike Kupfer; +Cc: jon.dufresne, emacs-devel
> From: Mike Kupfer <m.kupfer@acm.org>
> cc: Jon Dufresne <jon.dufresne@gmail.com>, emacs-devel@gnu.org
> Date: Sun, 27 Sep 2015 15:21:52 -0700
>
> If it happens again, I can certainly tell you how emacsclient got
> invoked. But I could use a clue about how to log communication between
> emacsclient and the server.
Set the variable server-log to a non-nil value (in your .emacs), then
look at the contents of the buffer named " *server*" after each
invocation of emacsclient.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2015-09-27 22:21 ` Mike Kupfer
2015-09-28 6:39 ` Eli Zaretskii
@ 2016-02-16 1:07 ` Mike Kupfer
2016-02-16 16:26 ` Eli Zaretskii
1 sibling, 1 reply; 26+ messages in thread
From: Mike Kupfer @ 2016-02-16 1:07 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 2583 bytes --]
After several months of not seeing this problem (last discussed in
September), I hit it today after invoking "emacsclient -c". I've
attached a partial screenshot. The background color looks right, and I
see the region for the menubar, but the gutters, scrollbar, and modeline
are all totally missing.
Here's the relevant excerpt from the server log for two emacsclient
invocations. The first one is for the bad frame, the second one is for
a working frame. I can provide the entire server log if desired.
Mon Feb 15 10:47:31 2016 server <10>: Status changed to open: open from -
Mon Feb 15 10:47:31 2016 server <10>: server-delete-client
Mon Feb 15 10:47:31 2016 server <10>: Received -env _=[...]
Mon Feb 15 10:47:31 2016 server <10>: Sent -emacs-pid 1622
Mon Feb 15 10:47:31 2016 server <10>: #<frame emacs@athyra 0x4343058> created
Mon Feb 15 10:50:52 2016 server <11>: Status changed to open: open from -
Mon Feb 15 10:50:52 2016 server <11>: server-delete-client
Mon Feb 15 10:50:52 2016 server <11>: Received -env _=[...]
Mon Feb 15 10:50:52 2016 server <11>: Sent -emacs-pid 1622
Mon Feb 15 10:50:52 2016 server <11>: #<frame emacs@athyra 0x4eba368> created
(The environment has some values that I'd rather not post on a public
list, so I've elided the environment from the above excerpt. The only
environment difference between the 2 frames was some sort of tag that
dmenu creates, e.g.,
DESKTOP_STARTUP_ID=i3/dmenu_run/5146-9-athyra_TIME3863103774.)
Some things that I noticed that looked interesting:
1. #<frame emacs@athyra 0x4343058> (the bad frame) refers to an address
that matches a frame that was closed back on Friday.
Fri Feb 12 15:58:27 2016 server <3>: server-handle-delete-frame, frame #<frame Todo.krb5-issues 0x4343058>
Fri Feb 12 15:58:27 2016 server <3>: server-delete-client noframe
Fri Feb 12 15:58:27 2016 server <3>: Status changed to closed: deleted
Fri Feb 12 15:58:27 2016 server <3>: server-delete-client
Fri Feb 12 15:58:27 2016 server <3>: Deleted
2. The bad frame does not appear in the results from frame-list:
(frame-list)
(#<frame emacs@athyra 0x4eba368> #<frame journal-2016.org 0x3073760> #<frame *GNU Emacs* 0x1128268>)
3. Doing an strace of Emacs showed zero activity when I moved the mouse
over the bad frame or when I clicked in it.
Also, I'll note that gdb shows the emacsclient process trying to read
from the socket. AFAICT there is nothing unusual there.
This was with Emacs 24.5. I plan to install 25.0.91 on the affected
system tomorrow, but who knows how long it will take for the problem to
reproduce.
mike
[-- Attachment #2: top of bad frame --]
[-- Type: image/png, Size: 15024 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-16 1:07 ` Mike Kupfer
@ 2016-02-16 16:26 ` Eli Zaretskii
2016-02-16 16:38 ` Kaushal Modi
2016-02-17 2:05 ` Mike Kupfer
0 siblings, 2 replies; 26+ messages in thread
From: Eli Zaretskii @ 2016-02-16 16:26 UTC (permalink / raw)
To: Mike Kupfer; +Cc: emacs-devel
> From: Mike Kupfer <m.kupfer@acm.org>
> Date: Mon, 15 Feb 2016 17:07:03 -0800
>
> After several months of not seeing this problem (last discussed in
> September), I hit it today after invoking "emacsclient -c". I've
> attached a partial screenshot. The background color looks right, and I
> see the region for the menubar, but the gutters, scrollbar, and modeline
> are all totally missing.
According to what you found, Emacs doesn't think this frame exists.
So it's small wonder its display is severely corrupted.
> Here's the relevant excerpt from the server log for two emacsclient
> invocations. The first one is for the bad frame, the second one is for
> a working frame. I can provide the entire server log if desired.
I'm not sure the server log is the place to look for the problem. Why
did you think it was relevant?
> (The environment has some values that I'd rather not post on a public
> list, so I've elided the environment from the above excerpt. The only
> environment difference between the 2 frames was some sort of tag that
> dmenu creates, e.g.,
> DESKTOP_STARTUP_ID=i3/dmenu_run/5146-9-athyra_TIME3863103774.)
What is "dmenu"?
What kind of build is this? (It's probably best to submit a formal
bug report where all these details will be spelled out.)
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-16 16:26 ` Eli Zaretskii
@ 2016-02-16 16:38 ` Kaushal Modi
2016-02-16 16:44 ` Eli Zaretskii
2016-02-17 2:05 ` Mike Kupfer
1 sibling, 1 reply; 26+ messages in thread
From: Kaushal Modi @ 2016-02-16 16:38 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: Emacs developers, Mike Kupfer
[-- Attachment #1: Type: text/plain, Size: 370 bytes --]
I can only answer the dmenu question.
> What is "dmenu"?
The OP is using this http://tools.suckless.org/dmenu/
It's basically a completion command line utility like ido-vertical/ivy.
dmenu_run (shipped with dmenu) is a special case of dmenu that suggests all
executables available in the env var $PATH and narrows down the completion
as the user types in characters.
[-- Attachment #2: Type: text/html, Size: 787 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-16 16:38 ` Kaushal Modi
@ 2016-02-16 16:44 ` Eli Zaretskii
2016-02-16 17:06 ` Kaushal Modi
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2016-02-16 16:44 UTC (permalink / raw)
To: Kaushal Modi; +Cc: emacs-devel, m.kupfer
> From: Kaushal Modi <kaushal.modi@gmail.com>
> Date: Tue, 16 Feb 2016 11:38:11 -0500
> Cc: Mike Kupfer <m.kupfer@acm.org>, Emacs developers <emacs-devel@gnu.org>
>
> > What is "dmenu"?
>
> The OP is using this http://tools.suckless.org/dmenu/
> It's basically a completion command line utility like ido-vertical/ivy.
>
> dmenu_run (shipped with dmenu) is a special case of dmenu that suggests all executables available in the
> env var $PATH and narrows down the completion as the user types in characters.
Thanks. Do you see how dmenu could be relevant to the issue at hand?
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-16 16:44 ` Eli Zaretskii
@ 2016-02-16 17:06 ` Kaushal Modi
0 siblings, 0 replies; 26+ messages in thread
From: Kaushal Modi @ 2016-02-16 17:06 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: Emacs developers, Mike Kupfer
[-- Attachment #1: Type: text/plain, Size: 364 bytes --]
I don't have any knowledge in this area to provide any useful info.
One difference is that I have dmenu installed as a separate standalone
package, but my windows manager is whatever default comes with RHEL
6.6/Gnome.
But it looks like the OP has installed the i3 WM (dmenu is shipped along as
a part of i3). So the problem could be at a lower level than dmenu.
[-- Attachment #2: Type: text/html, Size: 549 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-16 16:26 ` Eli Zaretskii
2016-02-16 16:38 ` Kaushal Modi
@ 2016-02-17 2:05 ` Mike Kupfer
2016-02-17 20:02 ` Eli Zaretskii
1 sibling, 1 reply; 26+ messages in thread
From: Mike Kupfer @ 2016-02-17 2:05 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
Eli Zaretskii wrote:
> > From: Mike Kupfer <m.kupfer@acm.org>
> > Here's the relevant excerpt from the server log for two emacsclient
> > invocations. The first one is for the bad frame, the second one is for
> > a working frame. I can provide the entire server log if desired.
>
> I'm not sure the server log is the place to look for the problem. Why
> did you think it was relevant?
Well, back in September when this was discussed, one of the suggestions
for the OP was to look into the "communications between emacsclient
and the server on the Emacs side, and see what is passed there." When I
asked how to do this, I was pointed at the server log.
And the results do seem relevant. I ran "emacsclient -c" twice within a
short period of time, and the server log showed 2 frames being created.
So *some* code in Emacs thought the first frame was created, even though
it didn't show up in the output from (frame-list).
And I still think it's suspicious that the bad frame seems to match a
frame that was deleted earlier.
> What kind of build is this? (It's probably best to submit a formal
> bug report where all these details will be spelled out.)
It's a pretty vanilla build of 24.5 on Debian stable.
I'll go ahead and open a bug.
thanks,
mike
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-17 2:05 ` Mike Kupfer
@ 2016-02-17 20:02 ` Eli Zaretskii
2016-02-18 5:01 ` Mike Kupfer
0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2016-02-17 20:02 UTC (permalink / raw)
To: Mike Kupfer; +Cc: emacs-devel
> From: Mike Kupfer <m.kupfer@acm.org>
> cc: emacs-devel@gnu.org
> Date: Tue, 16 Feb 2016 18:05:52 -0800
>
> I ran "emacsclient -c" twice within a short period of time, and the
> server log showed 2 frames being created. So *some* code in Emacs
> thought the first frame was created, even though it didn't show up
> in the output from (frame-list).
This means Emacs started creating the frame, but didn't finish that
process. A new frame is recorded in the frame list only when it is
completely set up. The question is: what happens during that process
which prevents it from completing?
At this point, it looks like instrumenting x-create-frame to write
traces to some file might tell what causes that function to stop doing
its job half way through.
> And I still think it's suspicious that the bad frame seems to match a
> frame that was deleted earlier.
Was the deleted frame deleted from the frame list?
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-17 20:02 ` Eli Zaretskii
@ 2016-02-18 5:01 ` Mike Kupfer
2016-02-20 11:24 ` Eli Zaretskii
0 siblings, 1 reply; 26+ messages in thread
From: Mike Kupfer @ 2016-02-18 5:01 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
As suggested, I've opened a bug for this: #22728.
Eli Zaretskii wrote:
> > From: Mike Kupfer <m.kupfer@acm.org>
> > cc: emacs-devel@gnu.org
> > Date: Tue, 16 Feb 2016 18:05:52 -0800
> >
> > I ran "emacsclient -c" twice within a short period of time, and the
> > server log showed 2 frames being created. So *some* code in Emacs
> > thought the first frame was created, even though it didn't show up
> > in the output from (frame-list).
>
> This means Emacs started creating the frame, but didn't finish that
> process. A new frame is recorded in the frame list only when it is
> completely set up. The question is: what happens during that process
> which prevents it from completing?
>
> At this point, it looks like instrumenting x-create-frame to write
> traces to some file might tell what causes that function to stop doing
> its job half way through.
Okay. If someone provides a patch, I'd be happy to apply it on the
systems I run Emacs on. I can also look at instrumenting
x-create-frame myself. That will take longer to set up, but given how
long it is between occurrences of this problem, some initial delay
probably doesn't matter much.
I wonder if the problem is particular to a certain widget set. If
anyone has suggestions for instrumenting the Athena (2D) widget set, I'd
welcome them.
> > And I still think it's suspicious that the bad frame seems to match a
> > frame that was deleted earlier.
>
> Was the deleted frame deleted from the frame list?
I'm not sure I understand the question. The frame list that I looked at
on the 15th had these 3 frames:
(#<frame emacs@athyra 0x4eba368>
#<frame journal-2016.org 0x3073760>
#<frame *GNU Emacs* 0x1128268>)
(This was after the bad frame was created.)
The log showed the deletion of
#<frame Todo.krb5-issues 0x4343058>
on the 12th, and the creation of
#<frame emacs@athyra 0x4343058>
on the 15th. Let me know if that doesn't answer your question.
thanks and regards,
mike
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Need help debugging Emacs: emacsclient will not draw its contents sometimes
2016-02-18 5:01 ` Mike Kupfer
@ 2016-02-20 11:24 ` Eli Zaretskii
0 siblings, 0 replies; 26+ messages in thread
From: Eli Zaretskii @ 2016-02-20 11:24 UTC (permalink / raw)
To: Mike Kupfer; +Cc: emacs-devel
> From: Mike Kupfer <m.kupfer@acm.org>
> cc: emacs-devel@gnu.org
> Date: Wed, 17 Feb 2016 21:01:15 -0800
>
> > At this point, it looks like instrumenting x-create-frame to write
> > traces to some file might tell what causes that function to stop doing
> > its job half way through.
>
> Okay. If someone provides a patch, I'd be happy to apply it on the
> systems I run Emacs on. I can also look at instrumenting
> x-create-frame myself. That will take longer to set up, but given how
> long it is between occurrences of this problem, some initial delay
> probably doesn't matter much.
Let me know if you need help in this matter. I can suggest some code,
but I cannot easily test it.
What I had in mind is adding code to x-create-frame, which would:
. open a file with a certain fixed file name, in append mode
. write series of trace info records to the file
. close the file
For the 2nd bullet above, inject 'fprintf' lines into x-create-frame
at strategic places which record the frame name and address. The
strategic places I'd consider are calls to other functions, especially
those that are X and toolkit calls. Examples upon the first glance
are: initialize_frame_menubar, x_wm_set_size_hint, adjust_frame_size,
XChangeProperty, and the loop with calls fset_param_alist. The
purpose of this is to find out which of these calls returns
successfully, and which doesn't. Once we know which call doesn't
return, we can look into that call to find out what happens there and
why.
> > > And I still think it's suspicious that the bad frame seems to match a
> > > frame that was deleted earlier.
> >
> > Was the deleted frame deleted from the frame list?
>
> I'm not sure I understand the question. The frame list that I looked at
> on the 15th had these 3 frames:
>
> (#<frame emacs@athyra 0x4eba368>
> #<frame journal-2016.org 0x3073760>
> #<frame *GNU Emacs* 0x1128268>)
>
> (This was after the bad frame was created.)
>
> The log showed the deletion of
>
> #<frame Todo.krb5-issues 0x4343058>
>
> on the 12th, and the creation of
>
> #<frame emacs@athyra 0x4343058>
>
> on the 15th. Let me know if that doesn't answer your question.
So you are saying that a new frame as created using the same address
as used by a frame that was previously deleted. I don't think this
means trouble, it just means Emacs reused the same memory for a new
frame object.
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2016-02-20 11:24 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-08 13:00 Need help debugging Emacs: emacsclient will not draw its contents sometimes Jon Dufresne
2015-09-08 13:28 ` Tassilo Horn
2015-09-08 17:18 ` Eli Zaretskii
2015-09-08 18:58 ` Jon Dufresne
2015-09-08 19:16 ` Eli Zaretskii
2015-09-09 22:29 ` Jon Dufresne
2015-09-10 15:26 ` Eli Zaretskii
2015-09-10 18:20 ` Jon Dufresne
2015-09-10 18:46 ` Eli Zaretskii
2015-09-10 18:52 ` Jon Dufresne
2015-09-11 7:26 ` Eli Zaretskii
2015-09-11 16:47 ` Jon Dufresne
2015-09-14 10:09 ` Eli Zaretskii
2015-09-23 0:51 ` Jon Dufresne
2015-09-23 6:45 ` Eli Zaretskii
2015-09-27 22:21 ` Mike Kupfer
2015-09-28 6:39 ` Eli Zaretskii
2016-02-16 1:07 ` Mike Kupfer
2016-02-16 16:26 ` Eli Zaretskii
2016-02-16 16:38 ` Kaushal Modi
2016-02-16 16:44 ` Eli Zaretskii
2016-02-16 17:06 ` Kaushal Modi
2016-02-17 2:05 ` Mike Kupfer
2016-02-17 20:02 ` Eli Zaretskii
2016-02-18 5:01 ` Mike Kupfer
2016-02-20 11:24 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).