Subject: Re: bug#76805: 31.0.50; [PATH] Fix Emacs uses 100% CPU after switching graphic frame to inactive

From: Lin Sun <[email-masked]>
Date: Thu, 13 Mar 2025 17:52:29 +0000

From: Eli Zaretskii <[email-masked]>
Sent: Thursday, March 13, 2025 02:43 PM
To: Po Lu <[email-masked]>

> From: Po Lu <[email-masked]>
> Cc: [email-masked],  [email-masked]
> Date: Thu, 13 Mar 2025 20:03:09 +0800
>
> Eli Zaretskii <[email-masked]> writes:
>
> >> From: Po Lu <[email-masked]>
> >> Cc: Lin Sun <[email-masked]>,  [email-masked]
> >> Date: Sun, 09 Mar 2025 21:58:38 +0800
> >>
> >> Eli Zaretskii <[email-masked]> writes:
> >>
> >> >> From: Lin Sun <[email-masked]>
> >> >> Date: Fri, 7 Mar 2025 08:17:31 +0000
> >> >>
> >> >> Emacs sometimes takes 100% CPU after I switch emacs graphic frame to inactive.
> >> >> This patch will fix the issue.
> >> >>
> >> >> Reproduce steps:
> >> >> 1. Build Emacs with gtk3 and xinput2 on Ubuntu 22.04.
> >> >> 2. (setq x-use-fast-mouse-position 'really-fast) in early-init.el.
> >> >> 3. On a windows-host start a X11 server, and ssh -XY
> >> >> ubuntu-host:emacs to Start emacs with X11 forwared-frame, and open
> >> >> emacs "src/eval.c", enable the show-paren-mode in emacs.
> >> >> 4. On the windows host, move the mouse out of emacs-graphic frame
> >> >> first, the move the mouse in emacs-graphic frame and click.
> >> >> 5. On the windows host, switch the emacs-graphic frame to inactive (switch a native windows app to active).
> >> >> Repeat steps 4,5 sometimes the emacs will takes 100% CPU.
> >> >>
> >> >> The issue won't happen if set the x-use-fast-mouse-position to `t` or `nil` instead of the 'really-fast.
> >> >>
> >> >> According to my debugging and tracking the variables, I found that
> >> >> 1. the xterm.c:21710 will let "dpyinfo->last_mouse_motion_frame = NULL;", then
> >> >> 2. later calls `x_fast_mouse_position` will no chance to let "XX->mouse_moved = false", then
> >> >> 3. the function some_mouse_moved() in keyboard.c always return true; then
> >> >> 4. the function timer_start_idle() in keyboard.c will be called again and again, which leads 100% CPU usage.
> >> >>
> >> >> As contrast when setting the x-use-fast-mouse-position to `t`, the
> >> >> "XX->mouse_moved = false;" always run, then the issue won't happen.
> >> >>
> >> >> Please help review the patch. Thanks
> >> >
> >> > Thanks.
> >> >
> >> > Po Lu, any comments?
> >>
> >> I'll investigate this issue tomorrow.  Thank you for reporting it.
> >
> > Did you have a chance to look into this?
>
> I fixed it but neglected to report the fact here, my apologies.

> Thanks, so should this bug be closed now?

I found commit now: https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=ab5bfcebddf4c0613ef352231628d4034c8cb178 .

Thank you all of you. Please feel free to close the ticket.