From: Eli Zaretskii <eliz@gnu.org>
To: ashish.is@lostca.se (Ashish SHUKLA)
Cc: 13864@debbugs.gnu.org
Subject: bug#13864: 24.3.50; emacsclient -t loops when connected to emacs server running in X11
Date: Fri, 08 Mar 2013 17:58:47 +0200 [thread overview]
Message-ID: <837glhzxvs.fsf@gnu.org> (raw)
In-Reply-To: <868v5y9pb5.fsf@chateau.d.if>
> From: ashish.is@lostca.se (Ashish SHUKLA)
> Cc: 13864@debbugs.gnu.org
> Date: Fri, 08 Mar 2013 15:38:30 +0530
>
> > (gdb) break dispnew.c:4509
> > (gdb) commands
> >> p i
> >> p desired_matrix->nrows
> >> if i < desired_matrix->nrows
> >> pgrowx desired_matrix->rows+i
> >> end
>
> I later added a 'continue' in here as Breakpoint 6 in the output.
Yes, sorry about that, I forgot.
> Not sure if the attached gdb output is any useful.
It is, thanks. I think we are making progress.
> - emacs -Q
> - M-x server-start
> - gdb stuff, breakpoints + loading .gdbinit
> - Started an xterm of dimensions (maybe 20-25 rows)
> - emacsclient -t
> - key presses (none of them is C-x C-f)
Emacs would begin to flicker after these, right?
> - Breakpoint 1 being hit and requiring me to type 'cont' on every hit
> - After some 'cont' inputs, I deleted it, and re-added it as Breakpoint 6 with
> 'continue' as mentioned above.
> - Breakpoint 6 being continuously hit
So you are saying that scrolling_1 is never called, is that right?
> - C-x 5 0 in emacsclient window
> - appended '====EMACSCLIENT STOPPED====' to logfile
> - emacsclient -t
> - Breakpoint 6 being hit
> - I resized window to 4-5 rows in an effort to reduce no. of redraw messages
> - Killed gdb after 2 minutes, which killed emacs.
To have a way of terminating the session in a more civilized way, I
frequently use the following trick: put a breakpoint at Fredraw_display,
before you start the debugging session. Then, whenever you want to
change something or finish the session, just "M-x redraw-display RET"
and GDB kicks in.
> Let me know if you need more information.
Hmm... Some observations:
. update_frame_1 is constantly called with either the entire frame,
starting with the menu bar, or just with the last line of the
frame, which is the echo area.
. I see tooltip messages being displayed in the echo area. You have
a mouse active (as far as Emacs is concerned) on the xterm frame,
is that right? Can you disable it and see if the flickering
persists?
. There are some instances where Emacs displayed "Quit" in the echo
area. Did you type C-g or some such?
Moving on in the investigation of the problem (assuming that
disabling the mouse doesn't fix it), I assume that the function
update_frame_line is being called to redraw the xterm frame, given the
evidence you gathered this far. First, let's make sure this is indeed
so. Use this breakpoint:
(gdb) break update_frame_line
(gdb) commands
> p vpos
> continue
> end
(gdb)
Please see if you see all the line numbers when you recreate the
situation with flickering.
If you indeed see all the line numbers of a frame, next thing is to
find out whether on your system the FRAME_CHAR_INS_DEL_OK macro
returns zero or non-zero. (Depending on that, Emacs uses two separate
portions of code in update_frame_line which try to avoid redrawing the
parts of screen that didn't change.) You could, for example, put a
breakpoint inside this block:
if (!FRAME_CHAR_INS_DEL_OK (f))
{
int i, j;
/* Find the first glyph in desired row that doesn't agree with
a glyph in the current row, and write the rest from there on. */
for (i = 0; i < nlen; i++)
{
if (i >= olen || !GLYPH_EQUAL_P (nbody + i, obody + i))
{
/* Find the end of the run of different glyphs. */
j = i + 1;
while (j < nlen
&& (j >= olen
|| !GLYPH_EQUAL_P (nbody + j, obody + j)
|| CHAR_GLYPH_PADDING_P (nbody[j])))
++j;
/* Output this run of non-matching chars. */
cursor_to (f, vpos, i);
write_glyphs (f, nbody + i, j - i);
i = j - 1;
/* Now find the next non-match. */
}
}
/* Clear the rest of the line, or the non-clear part of it. */
if (olen > nlen)
{
cursor_to (f, vpos, nlen);
clear_end_of_line (f, olen);
}
/* Make current row = desired row. */
make_current (desired_matrix, current_matrix, vpos);
return; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
on the marked line, and see if it ever breaks.
Thanks.
next prev parent reply other threads:[~2013-03-08 15:58 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-03 19:19 bug#13864: 24.3.50; emacsclient -t loops when connected to emacs server running in X11 Ashish SHUKLA
2013-03-04 17:50 ` Eli Zaretskii
2013-03-04 19:13 ` Ashish SHUKLA
2013-03-04 20:22 ` Eli Zaretskii
2013-03-05 0:26 ` Ashish SHUKLA
2013-03-06 17:07 ` Eli Zaretskii
2013-03-06 18:52 ` Ashish SHUKLA
2013-03-06 21:00 ` Eli Zaretskii
2013-03-07 1:43 ` Ashish SHUKLA
2013-03-07 6:55 ` Eli Zaretskii
2013-03-07 7:38 ` Ashish SHUKLA
2013-03-07 9:16 ` Eli Zaretskii
2013-03-07 10:19 ` Ashish SHUKLA
2013-03-07 12:48 ` Eli Zaretskii
2013-03-08 10:08 ` Ashish SHUKLA
2013-03-08 15:58 ` Eli Zaretskii [this message]
2013-03-13 9:00 ` Ashish SHUKLA
2013-03-15 9:39 ` Eli Zaretskii
2013-03-22 12:44 ` Ashish SHUKLA
2013-03-24 19:54 ` Eli Zaretskii
2013-03-25 9:28 ` Ashish SHUKLA
2013-03-25 10:56 ` Eli Zaretskii
2013-04-01 16:45 ` Ashish SHUKLA
2013-04-02 17:10 ` Eli Zaretskii
2013-04-10 9:06 ` Ashish SHUKLA
2013-04-10 15:41 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=837glhzxvs.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=13864@debbugs.gnu.org \
--cc=ashish.is@lostca.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.