From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Naofumi Yasufuku Newsgroups: gmane.emacs.bugs Subject: bug#48812: 28.0.50; describe-bindings stucks and gets high CPU load Date: Fri, 4 Jun 2021 00:15:06 +0900 Message-ID: <1ADAE0CF-4201-4FBC-A461-373A75E2F669@yasufuku.dev> References: Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.100.0.2.22\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_72A61BE4-FA1D-4EEF-A911-15B3FA207C45" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="14367"; mail-complaints-to="usenet@ciao.gmane.io" To: 48812@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Jun 03 17:16:25 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lop57-0003RO-9Y for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 03 Jun 2021 17:16:25 +0200 Original-Received: from localhost ([::1]:47832 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lop56-0007pg-68 for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 03 Jun 2021 11:16:24 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:51392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lop4k-0007p7-R1 for bug-gnu-emacs@gnu.org; Thu, 03 Jun 2021 11:16:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:32977) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lop4k-0000nj-JQ for bug-gnu-emacs@gnu.org; Thu, 03 Jun 2021 11:16:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lop4k-0000q0-FL for bug-gnu-emacs@gnu.org; Thu, 03 Jun 2021 11:16:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Naofumi Yasufuku Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 03 Jun 2021 15:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 48812 X-GNU-PR-Package: emacs Original-Received: via spool by 48812-submit@debbugs.gnu.org id=B48812.16227333323179 (code B ref 48812); Thu, 03 Jun 2021 15:16:02 +0000 Original-Received: (at 48812) by debbugs.gnu.org; 3 Jun 2021 15:15:32 +0000 Original-Received: from localhost ([127.0.0.1]:44523 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lop4C-0000p8-RS for submit@debbugs.gnu.org; Thu, 03 Jun 2021 11:15:32 -0400 Original-Received: from relay12.mail.gandi.net ([217.70.178.232]:54253) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lop46-0000on-G4 for 48812@debbugs.gnu.org; Thu, 03 Jun 2021 11:15:26 -0400 Original-Received: (Authenticated sender: naofumi@yasufuku.dev) by relay12.mail.gandi.net (Postfix) with ESMTPSA id 29F68200018 for <48812@debbugs.gnu.org>; Thu, 3 Jun 2021 15:15:14 +0000 (UTC) In-Reply-To: X-Mailer: Apple Mail (2.3654.100.0.2.22) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:207960 Archived-At: --Apple-Mail=_72A61BE4-FA1D-4EEF-A911-15B3FA207C45 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Attached simple patch could fix this. Is there no regression with this change? Regards, =E2=80=94Naofumi --Apple-Mail=_72A61BE4-FA1D-4EEF-A911-15B3FA207C45 Content-Disposition: attachment; filename=0001-Fix-describe-bindings-stuck-caused-by-heavy-shadow_l.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Fix-describe-bindings-stuck-caused-by-heavy-shadow_l.patch" Content-Transfer-Encoding: quoted-printable =46rom=2066cc6b85e13fc49a5b8115c4606d36660c486a97=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Naofumi=20Yasufuku=20=0A= Date:=20Thu,=203=20Jun=202021=2022:02:28=20+0900=0ASubject:=20[PATCH]=20= Fix=20describe-bindings=20stuck=20caused=20by=20heavy=20shadow_lookup()=0A= =20loop=0A=0A*=20src/keymap.c=20(describe_vector):=20If=20'shadowed_by'=20= key=20definition=0Ais=20nil,=20do=20not=20attempt=20to=20find=20a=20= first=20key=20character,=20which=20is=0Ashadowed=20by=20the=20same=20= command,=20in=20consecutive=20character=20table=20range=20by=0Ausing=20= shadow_lookup()=20loop.=20=20This=20loop=20can=20cause=20millions=20of=0A= Flookup_key()=20calls:=20e.g.=20'self-insert-command'=20bindings.=0A= (Bug#48812=20Bug#9293)=0A---=0A=20src/keymap.c=20|=202=20+-=0A=201=20= file=20changed,=201=20insertion(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/src/keymap.c=20b/src/keymap.c=0Aindex=20fb8eceaec1..a20b877565=20= 100644=0A---=20a/src/keymap.c=0A+++=20b/src/keymap.c=0A@@=20-3062,7=20= +3062,7=20@@=20describe_vector=20(Lisp_Object=20vector,=20Lisp_Object=20= prefix,=20Lisp_Object=20args,=0A=20=0A=20=20=20=20=20=20=20/*=20Make=20= sure=20found=20consecutive=20keys=20are=20either=20not=20shadowed=20or,=0A= =20=09=20if=20they=20are,=20that=20they=20are=20shadowed=20by=20the=20= same=20command.=20=20*/=0A-=20=20=20=20=20=20if=20(CHAR_TABLE_P=20= (vector)=20&&=20i=20!=3D=20starting_i)=0A+=20=20=20=20=20=20if=20(!NILP=20= (shadowed_by)=20&&=20CHAR_TABLE_P=20(vector)=20&&=20i=20!=3D=20= starting_i)=0A=20=09{=0A=20=09=20=20Lisp_Object=20key=20=3D=20= make_nil_vector=20(1);=0A=20=09=20=20for=20(int=20j=20=3D=20starting_i=20= +=201;=20j=20<=3D=20i;=20j++)=0A--=20=0A2.31.1=0A=0A= --Apple-Mail=_72A61BE4-FA1D-4EEF-A911-15B3FA207C45 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Jun 4, 2021, at 0:06, Naofumi Yasufuku = wrote: >=20 > This describe-bindings stuck is caused by millions of shadow_lookup() = calls > in src/keymap.c describe_vector(). >=20 > = ------------------------------------------------------------------------ > $ ./src/emacs > describe_vector] shadow_lookup loop START: = definition=3Dself-insert-command shadowed_by=3Dnil starting_i=3D128 = i=3D4194175 > describe_vector] shadow_lookup loop END: = definition=3Dself-insert-command shadowed_by=3Dnil starting_i=3D128 = i=3D4194175 > describe_vector] shadow_lookup loop START: = definition=3Dself-insert-command shadowed_by=3Dnil starting_i=3D4194176 = i=3D4194303 > describe_vector] shadow_lookup loop END: = definition=3Dself-insert-command shadowed_by=3Dnil starting_i=3D4194176 = i=3D4194303 > describe_vector] shadow_lookup loop START: definition=3Ddigit-argument = shadowed_by=3Dnil starting_i=3D48 i=3D57 > describe_vector] shadow_lookup loop END: definition=3Ddigit-argument = shadowed_by=3Dnil starting_i=3D48 i=3D57 > $=20 > = ------------------------------------------------------------------------ > diff --git a/src/keymap.c b/src/keymap.c > index fb8eceaec1..0efa78ce9b 100644 > --- a/src/keymap.c > +++ b/src/keymap.c > @@ -3065,6 +3065,11 @@ describe_vector (Lisp_Object vector, = Lisp_Object prefix, Lisp_Object args, > if (CHAR_TABLE_P (vector) && i !=3D starting_i) > { > Lisp_Object key =3D make_nil_vector (1); > + fprintf (stderr, "%s] shadow_lookup loop START: definition=3D%s = shadowed_by=3D%s starting_i=3D%d i=3D%d\n", > + __func__, > + SDATA (SYMBOL_NAME (definition)), > + SDATA (SYMBOL_NAME (shadowed_by)), > + starting_i, i); > for (int j =3D starting_i + 1; j <=3D i; j++) > { > ASET (key, 0, make_fixnum (j)); > @@ -3072,6 +3077,11 @@ describe_vector (Lisp_Object vector, = Lisp_Object prefix, Lisp_Object args, > if (NILP (Fequal (tem, shadowed_by))) > i =3D j - 1; > } > + fprintf (stderr, "%s] shadow_lookup loop END: definition=3D%s = shadowed_by=3D%s starting_i=3D%d i=3D%d\n", > + __func__, > + SDATA (SYMBOL_NAME (definition)), > + SDATA (SYMBOL_NAME (shadowed_by)), > + starting_i, i); > } > =20 > /* If we have a range of more than one character, > = ------------------------------------------------------------------------ >=20 >=20 > This shadow_lookup() loop was introduced by the following commit: >=20 > = ------------------------------------------------------------------------ > commit a6490343366f2b2331a91dcb693effb3a9dd78f5 > Author: Stefan Kangas > Date: Fri Nov 13 15:28:29 2020 +0100 >=20 > Don't show key ranges if shadowed by different commands >=20 > * src/keymap.c (describe_vector): Make sure found consecutive keys > are either not shadowed or, if they are, that they are shadowed by > the same command. (Bug#9293) > * test/src/keymap-tests.el > (help--describe-vector/bug-9293-one-shadowed-in-range): New test. >=20 > = ------------------------------------------------------------------------ >=20 >=20 > <28.0.50-describe-bindings-01.png> >=20 > <28.0.50-describe-bindings-02.png> >=20 > <27.1-ubuntu-describe-bindings.png> >=20 >=20 > In GNU Emacs 28.0.50 (build 3, aarch64-unknown-linux-gnu, GTK+ Version = 3.24.25, cairo version 1.16.0) > of 2021-06-03 built on phoebe > Repository revision: 089e0c4c55dcf72f9cf2f6f04b8a52fc7355499c > Repository branch: master > Windowing system distributor 'The X.Org Foundation', version = 11.0.12101001 > System Description: Ubuntu 21.04 >=20 > Configured features: > CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG = JSON > LCMS2 LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG > RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM > GTK3 ZLIB >=20 > Important settings: > value of $LANG: en_US.UTF-8 > value of $XMODIFIERS: @im=3Dibus > locale-coding-system: utf-8-unix >=20 > Major mode: C/*l >=20 > Minor modes in effect: > bug-reference-prog-mode: t > tooltip-mode: t > global-eldoc-mode: t > electric-indent-mode: t > mouse-wheel-mode: t > tool-bar-mode: t > menu-bar-mode: t > file-name-shadow-mode: t > global-font-lock-mode: t > font-lock-mode: t > blink-cursor-mode: t > auto-composition-mode: t > auto-encryption-mode: t > auto-compression-mode: t > line-number-mode: t > transient-mark-mode: t > abbrev-mode: t >=20 > Load-path shadows: > None found. >=20 > Features: > (shadow sort mail-extr emacsbug message rmc puny rfc822 mml mml-sec = epa > derived epg epg-config gnus-util rmail rmail-loaddefs auth-source = cl-seq > eieio eieio-core cl-macs eieio-loaddefs password-cache json map > text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 > mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums > mm-util mail-prsvr mail-utils vc-git diff-mode easy-mmode vc > vc-dispatcher bug-reference cc-mode cc-fonts cc-guess cc-menus cc-cmds > cc-styles cc-align cc-engine cc-vars cc-defs misearch multi-isearch > dired-aux dired dired-loaddefs time-date subr-x cl-extra seq byte-opt = gv > bytecomp byte-compile cconv kmacro two-column help-mode cl-loaddefs > cl-lib iso-transl tooltip eldoc electric uniquify ediff-hook vc-hooks > lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar > dnd fontset image regexp-opt fringe tabulated-list replace newcomment > text-mode elisp-mode lisp-mode prog-mode register page tab-bar = menu-bar > rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock > font-lock syntax font-core term/tty-colors frame minibuffer cl-generic > cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet = lao > korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech > european ethiopic indian cyrillic chinese composite charscript = charprop > case-table epa-hook jka-cmpr-hook help simple abbrev obarray > cl-preloaded nadvice button loaddefs faces cus-face macroexp files > window text-properties overlay sha1 md5 base64 format env code-pages > mule custom widget hashtable-print-readable backquote threads dbusbind > inotify lcms2 dynamic-setting system-font-setting font-render-setting > cairo move-toolbar gtk x-toolkit x multi-tty make-network-process = emacs) >=20 > Memory information: > ((conses 16 118009 7881) > (symbols 48 9308 1) > (strings 32 27924 2053) > (string-bytes 1 1038142) > (vectors 16 18491) > (vector-slots 8 227657 9510) > (floats 8 31 163) > (intervals 56 10630 0) > (buffers 992 14)) >=20 >=20 --Apple-Mail=_72A61BE4-FA1D-4EEF-A911-15B3FA207C45--