From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ihor Radchenko Newsgroups: gmane.emacs.bugs Subject: bug#66117: 30.0.50; `find-buffer-visiting' is slow when opening large number of buffers Date: Sat, 23 Sep 2023 08:22:17 +0000 Message-ID: <87wmwh2tae.fsf@localhost> References: <878r919qfh.fsf@localhost> <72c93fb0-bf3e-3dad-69c0-2147cfa40f57@gutov.dev> <875y42xyex.fsf@localhost> <87zg1ewfc2.fsf@localhost> <834jjm749q.fsf@gnu.org> <87cyyawd1a.fsf@localhost> <83pm2a5k85.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39058"; mail-complaints-to="usenet@ciao.gmane.io" Cc: dmitry@gutov.dev, 66117@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Sep 23 10:22:16 2023 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 1qjxu4-0009xk-GJ for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 23 Sep 2023 10:22:16 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qjxth-00055z-Hd; Sat, 23 Sep 2023 04:21:53 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qjxtf-00055q-MB for bug-gnu-emacs@gnu.org; Sat, 23 Sep 2023 04:21:51 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qjxtf-00031y-ED for bug-gnu-emacs@gnu.org; Sat, 23 Sep 2023 04:21:51 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qjxtq-0005xH-46 for bug-gnu-emacs@gnu.org; Sat, 23 Sep 2023 04:22:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ihor Radchenko Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 23 Sep 2023 08:22:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66117 X-GNU-PR-Package: emacs Original-Received: via spool by 66117-submit@debbugs.gnu.org id=B66117.169545728922842 (code B ref 66117); Sat, 23 Sep 2023 08:22:02 +0000 Original-Received: (at 66117) by debbugs.gnu.org; 23 Sep 2023 08:21:29 +0000 Original-Received: from localhost ([127.0.0.1]:37731 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qjxtJ-0005wM-3v for submit@debbugs.gnu.org; Sat, 23 Sep 2023 04:21:29 -0400 Original-Received: from mout02.posteo.de ([185.67.36.66]:39927) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qjxtG-0005w6-RD for 66117@debbugs.gnu.org; Sat, 23 Sep 2023 04:21:27 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id AB562240103 for <66117@debbugs.gnu.org>; Sat, 23 Sep 2023 10:21:09 +0200 (CEST) Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4Rt2CS5QKMz6v5T; Sat, 23 Sep 2023 10:21:08 +0200 (CEST) In-Reply-To: <83pm2a5k85.fsf@gnu.org> 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-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:271143 Archived-At: Eli Zaretskii writes: >> Because `buffer-file-name' can be modified from Lisp (via >> `set-visited-file-name' or directly). Same for `buffer-file-truename' >> and `buffer-file-number'. > > You could update the cache in set-visited-file-name, and ignore > direct changes. I have eyeballed Emacs sources, and it looks like a huge number of libraries sets `buffer-file-name' directly. Also, even `find-file-noselect' does not use `set-visited-file-name'. - Functions setting ~buffer-file-name~ manually (except those setting it to nil): - tests - ~vc-find-revision-no-save~ - ~url-insert-buffer-contents~ - ~plstore-open~ - ~protect-innocence-hook~ (really?) - ~tramp-handle-insert-file-contents~ - ~tramp-archive-handle-insert-file-contents~ - ~mailcap-view-file~ - ~ange-ftp-parse-netrc~ - ~ange-ftp-write-region~ - ~ange-ftp-insert-file-contents~ - ~mh-display-msg~ - ~mh-make-folder~ - ~mh-read-draft~ - ~feedmail-vm-mail-mode~ - ~feedmail-send-it~ - ~jka-compr-write-region~ - ~jka-compr-insert-file-contents~ - ~image-dired-write-tags~ - ~image-dired-remove-tag~ - ~image-dired-write-comments~ - ~hfy-buffer~ - ~nndraft-request-associate-buffer~ - ~nndraft-auto-save-file-name~ - ~nnbabyl-create-mbox~ - ~mm-display-inline-fontify~ - ~mm-url-insert-file-contents~ - ~mm-extern-url~ - ~message-send-mail-with-mh~ - ~message-set-auto-save-file-name~ - ~gnus-dribble-read-file~ - ~gnus-save-newsrc-file~ - ~gnus-gnus-to-newsrc-format~ - ~gnus-mime-copy-part~ - ~find-alternate-file~ - ~find-file-noselect-1~ (but not by default?) - ~set-visited-file-name~ - ~file-name-non-special~ - ~erc-dcc-find-file~ - ~epa-file-insert-file-contents~ - ~epa-file-write-region~ - ~save-completions-to-file~ - ~load-completions-from-file~ - ~archive-extract~ - Functions setting ~buffer-file-truename~ manually (except those setting it to nil): - ~tar-extract~ - ~find-alternate-file~ - ~find-file-noselect-1~ - ~set-visited-file-name~ - ~revert-buffer--default~ - ~archive-extract~ - Functions setting ~buffer-file-number~ manually (except those setting it to nil): - ~find-alternate-file~ - ~find-file-noselect-1~ - ~set-visited-file-name~ - ~basic-save-buffer~ >> Or should we just assume that these variables remain unchanged other >> than by primitives? > > Programs that make these changes are asking for trouble, IMO. AFAICT, > find-buffer-visiting will never find such buffers anyway. It would, in its current form. Because it calls `get-file-buffer' that loops over all the buffers and checks their buffer-local `buffer-file-name' value, including values set via `setq' in Elisp. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at . Support Org development at , or support my work at