all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: ashish.is@lostca.se (Ashish SHUKLA)
To: Eli Zaretskii <eliz@gnu.org>
Cc: 13864@debbugs.gnu.org
Subject: bug#13864: 24.3.50; emacsclient -t loops when connected to emacs server running in X11
Date: Mon, 01 Apr 2013 22:15:46 +0530	[thread overview]
Message-ID: <861uau6vyd.fsf@chateau.d.if> (raw)
In-Reply-To: <831ub33fzt.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 25 Mar 2013 12:56:06 +0200")


[-- Attachment #1.1: Type: text/plain, Size: 3605 bytes --]

On Mon, 25 Mar 2013 12:56:06 +0200, Eli Zaretskii <eliz@gnu.org> said:
>> From: ashish.is@lostca.se (Ashish SHUKLA)
>> Cc: 13864@debbugs.gnu.org
>> Date: Mon, 25 Mar 2013 14:58:08 +0530
>> 
>> >  (gdb) break dispnew.c:2623 if vpos == 5
>> 
>> s/vpos/row/ I guess

> Yes, sorry.

>> Please refer to the attached gdb output with annotations prefixed with '=====> '.

> OK, the reason for constant redrawing of the emacsclient TTY frame is
> that Emacs thinks that frame is "garbaged" (i.e. its display is
> completely outdated and should be redrawn):

>   Hardware watchpoint 6: ((struct glyph_row *) 0x196e500)->enabled_p

>   Old value = 1
>   New value = 0
>   clear_glyph_matrix_rows (matrix=0x1825f00, start=5, end=28) at dispnew.c:728
>   728	  for (; start < end; ++start)
>   #0  clear_glyph_matrix_rows (matrix=0x1825f00, start=5, end=28) at dispnew.c:728
>   #1  0x0000000000417028 in clear_glyph_matrix (matrix=0x1825f00) at dispnew.c:747
>   #2  0x00000000004175bc in clear_current_matrices (f=0x117ac48) at dispnew.c:795
>   #3  0x000000000044c348 in clear_garbaged_frames () at xdisp.c:10611
>   #4  0x0000000000450de9 in redisplay_internal () at xdisp.c:12925

> The function clear_garbaged_frames does this:

>       FOR_EACH_FRAME (tail, frame)
> 	{
> 	  struct frame *f = XFRAME (frame);

> 	  if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) <<<<<<<<<
> 	    {
> 	      if (f->resized_p)
> 		{
> 		  redraw_frame (f);
f-> force_flush_display_p = 1;
> 		}
> 	      clear_current_matrices (f); <<<<<<<<<<<<<<<<<<<<<<<<<<<
> 	      changed_count++;
f-> garbaged = 0;
f-> resized_p = 0;
> 	    }
> 	}

> And the call to clear_current_matrices invalidates the record of
> what's currently displayed on the TTY frame, and therefore causes
> constant redrawing of that frame.

> So the question now is: which code sets the frame's 'garbaged' flag?
> To find out, do this in GDB:

>  (gdb) tbreak dispnew.c:4861 if vpos == 5
>  (gdb) c

> The breakpoint is here:

>       else
> 	/* Make sure we are in the right row, otherwise cursor movement
> 	   with cmgoto might use `ch' in the wrong row.  */
> 	cursor_to (f, vpos, 0);

>       make_current (desired_matrix, current_matrix, vpos); <<<<<<<<<<<<<<<<
>       return;
>     }

> Note that the breakpoint is temporary ("tbreak"), so it will only
> break once.  This is to avoid hitting it again, after you set the
> watchpoint below, because we only need this breakpoint to find out the
> address of the TTY frame structure, whose 'garbaged' flag we want to
> watch.

> When this breakpoint breaks, type these commands:

>  (gdb) p f
>  $1 = (struct frame *) 0x12345678
>  (gdb) watch ((struct frame *) 0x12345678)->garbaged
>  (gdb) commands
>> if ((struct frame *) 0x12345678)->garbaged == 1
>> bt
>> end
>> continue
>  (gdb)

> Again, the value of f will be different in your case; use whatever GDB
> shows in your case for the following 'watch' command.

> Now do whatever is needed to cause Emacs flicker, and the backtrace
> from the watchpoint should show who sets the garbaged flag of the TTY
> frame.

Please refer to the attached output. I'm not sure if it's for the right frame
(i.e. "garbaged" flag monitored for X11 frame, or emacsclient frame).

Let me know if you like me to take it again.

Thanks
-- 
Ashish SHUKLA

“Many of the convicted thieves Parker has met began their life of crime after
taking college Computer Science courses.” (Roger Rapoport, "Programs for
Plunder", Omni, March 1981)

Sent from my Emacs

[-- Attachment #1.2: gdb.txt.xz --]
[-- Type: application/octet-stream, Size: 4312 bytes --]

[-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2013-04-01 16:45 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
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 [this message]
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=861uau6vyd.fsf@chateau.d.if \
    --to=ashish.is@lostca.se \
    --cc=13864@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    /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.