Subject: Re: bug#13864: 24.3.50; emacsclient -t loops when connected to emacs server running in X11

From: [email-masked] (Ashish SHUKLA)
Date: Fri, 22 Mar 2013 18:14:22 +0530

On Fri, 15 Mar 2013 11:39:34 +0200, Eli Zaretskii <[email-masked]> said:
>> From: [email-masked] (Ashish SHUKLA)
>> Cc: [email-masked]
>> Date: Wed, 13 Mar 2013 14:30:05 +0530

[...]

>> I don't know what you meant by mouse active. FTR, I don't use
>> "xterm-mouse-mode" in my .emacs.d/init.el nor the -Q config has that, if
>> that's what you're implying. Emacs instance in xterm doesn't have any effect
>> of mouse in it. The tooltip is courtesy some spurious key-presses during
>> debugging..

> That's strange, I'm probably missing something.  Not terribly
> important (it's tangential to the issue I'm hunting with your GDB
> collected data), but could you give me a recipe to cause such a
> tooltip in the xterm frame by some key-press?

Sure, you set a breakpoint to some function which gets invoked as 'emacsclient
-t' starts, like update_frame_line, but forgot to add 'cont' to the list of
commands. And then you forgot that you didn't add 'cont' and starts
'emacsclient -t' and start typing (like some arrow key) without noticing that
'emacsclient' frame has yet to appear on the screen. Now look at gdb window,
breakpoint must have it, do 'cont' there so that emacsclient starts, and now
you'll see some characters in buffer, with "End of buffer" message in
minibuffer (tooltip).

[...]

> To answer the last questions, please use the following GDB setup.
> (Please verify the line numbers before you set each breakpoint, in
> case your sources are slightly different from what I'm using to write
> this message.)

FTR, I'm still running r111924 for this debugging to avoid adding more
variables.

[...]

> This is certainly a lot of typing, so I suggest to put it all (sans
> the "(gdb)" and ">" parts) in a file, and then "source that-file" from
> inside GDB.  This way, you will be able to repeat the experiment
> without going through the pain of retyping it all again.  (Don't
> forget adding to that file "set logging on" and a breakpoint on
> Fredraw_display.)

Done.

> Once you are set up in GDB, make Emacs flicker, and collect the data
> printed by GDB.  The goal of these breakpoints is to see which code is
> involved in the flickering situation, and which parts of it are
> actually writing to the screen.

The output is attached though I forgot to prefix my inline annotations during
gdb. Here are they from the my shell history:

#v+
  184  echo Starting emacsclient -t >>gdb.txt
  185  echo 'Typing "foobar" in emacsclient window' >>gdb.txt
  186  echo 'Now hovering mouse over X11 window' >>gdb.txt
  187  echo 'Now focusing to emacsclient xterm by clicking on xterm titlebar' >>gdb.txt
  188  echo 'Now typing "foobar" in emacsclient xterm' >>gdb.txt
  189  echo 'Typed "foobar" two more times in emacsclient xterm ^^^, and no flicker yet' >>gdb.txt
  190  echo 'Switching to X11 window' >>gdb.txt
  191  echo 'Switching back to xterm window and typing "foobar"' >>gdb.txt
  192  echo 'I only typed "foo" and it started flickering ^^^^^ vvvvv' >>gdb.txt
  193  echo 'Typing C-g and M-x redraw-display' >>gdb.txt
  194  echo 'Flickering stopped after C-g, now M-x redraw-display ' >>gdb.txt
  195  echo 'While typing: M-x redraw-display it started flickering again' >>gdb.txt
#v-

HTH
-- 
Ashish SHUKLA

“Does history record any case in which the majority was right?” (Robert
A. Heinlein, 1973)

Sent from my Emacs