GNU bug report logs - #73855
[PATCH] * lisp/autorevert.el: Avoid reverting buffer in short time

Previous Next

Package: emacs;

Reported by: Lin Sun <sunlin7.mail <at> gmail.com>

Date: Thu, 17 Oct 2024 23:28:01 UTC

Severity: normal

Tags: patch

Merged with 74490, 74491

Fixed in versions 31.1, 31.0.50

Done: Stefan Kangas <stefankangas <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Lin Sun <sunlin7.mail <at> gmail.com>
Cc: 73855 <at> debbugs.gnu.org
Subject: bug#73855: [PATCH] * lisp/autorevert.el: Avoid reverting buffer in short time
Date: Sat, 19 Oct 2024 11:06:41 +0200
Lin Sun <sunlin7.mail <at> gmail.com> writes:

Hi Lin,

> Let's look at this case: the auto-revert-interval is 5, a writing
> happened 1 write / second, total 20 writings (in 20 seconds). The
> revert-handler run on: first time (T0), and then locks for 5 seconds;
> then T5 lock done, revert the buffer; then T6 reverts the and locks it
> again... The revert happened as below:
>
> T0...T5,T6...T11,T12...T17,T18...T23
>
> The T5,T6 are nearby, similar happened on T11,T12, and after each lock
> end, there is a revert executed nearby.
>
> This patch try to enhance the lock, then makes the revert happened on:
>
> T0...T5...T10...T15...
>
> That reduced loading on my local.

Thanks for explanation, now I understand the scenario.

Your patch makes sense. However, autorevert-tests fail now:

--8<---------------cut here---------------start------------->8---
# make -C test autorevert-tests
make: Entering directory '/home/albinus/src/emacs/test'
make[1]: Entering directory '/home/albinus/src/emacs/test'
  GEN      lisp/autorevert-tests.log
Running 7 tests (2024-10-19 11:02:58+0200, selector `(not (tag :unstable))')
Reverting buffer `emacs-test-zzmdD8-autorevert'
   passed  1/7  auto-revert-test00-auto-revert-mode (3.554035 sec)
(Shell command succeeded with no output)
Reverting buffer `auto-revert-testenE8rY-autorevert'
Reverting buffer `auto-revert-testOJVaub-autorevert'
   passed  2/7  auto-revert-test01-auto-revert-several-files (0.172674 sec)
Reverting buffer `emacs-test-IIR73t-autorevert'
   passed  3/7  auto-revert-test03-auto-revert-tail-mode (2.527101 sec)
Reverting buffer `tmp'
Reverting buffer `tmp'
   passed  4/7  auto-revert-test04-auto-revert-mode-dired (0.457824 sec)
Reverting buffer `emacs-test-i5RWpJ-autorevert'
Test auto-revert-test05-global-notify backtrace:
  signal(ert-test-failed (((should (equal (auto-revert-test--buffer-st
  ert-fail(((should (equal (auto-revert-test--buffer-string buf-2) "2-
  (if (unwind-protect (setq value-171 (apply fn-169 args-170)) (setq f
  (let (form-description-173) (if (unwind-protect (setq value-171 (app
  (let ((value-171 'ert-form-evaluation-aborted-172)) (let (form-descr
  (let* ((fn-169 #'equal) (args-170 (condition-case err (list (auto-re
  (progn (setq buf-1 (find-file-noselect file-1)) (auto-revert-test--i
  (unwind-protect (progn (setq buf-1 (find-file-noselect file-1)) (aut
  (let* ((auto-revert-use-notify t) (auto-revert-avoid-polling t) (was
  (progn (let* ((auto-revert-use-notify t) (auto-revert-avoid-polling
  (unwind-protect (progn (let* ((auto-revert-use-notify t) (auto-rever
  (let* ((coding-system-for-write nil) (temp-file (identity (make-temp
  (progn (let* ((coding-system-for-write nil) (temp-file (identity (ma
  (unwind-protect (progn (let* ((coding-system-for-write nil) (temp-fi
  (let* ((coding-system-for-write nil) (temp-file (identity (make-temp
  (progn (let* ((coding-system-for-write nil) (temp-file (identity (ma
  (unwind-protect (progn (let* ((coding-system-for-write nil) (temp-fi
  (let* ((coding-system-for-write nil) (temp-file (identity (make-temp
  (progn (customize-set-variable 'auto-revert-interval 0.1) (let* ((co
  (unwind-protect (progn (customize-set-variable 'auto-revert-interval
  (let ((auto-revert-interval-orig auto-revert-interval)) (unwind-prot
  #f(lambda () [t] (let ((value-147 (gensym "ert-form-evaluation-abort
  #f(compiled-function () #<bytecode 0x1e80ca290561ae1>)()
  handler-bind-1(#f(compiled-function () #<bytecode 0x1e80ca290561ae1>
  ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
  ert-run-test(#s(ert-test :name auto-revert-test05-global-notify :doc
  ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m
  ert-run-tests((not (tag :unstable)) #f(compiled-function (event-type
  ert-run-tests-batch((not (tag :unstable)))
  ert-run-tests-batch-and-exit((not (tag :unstable)))
  eval((ert-run-tests-batch-and-exit '(not (tag :unstable))) t)
  command-line-1(("-L" ":." "-l" "ert" "--eval" "(setq treesit-extra-l
  command-line()
  normal-top-level()
Test auto-revert-test05-global-notify condition:
    (ert-test-failed
     ((should (equal (auto-revert-test--buffer-string buf-2) "2-a")) :form
      (equal "" "2-a") :value nil :explanation
      (arrays-of-different-length 0 3 "" "2-a" first-mismatch-at 0)))
   FAILED  5/7  auto-revert-test05-global-notify (1.020224 sec) at lisp/autorevert-tests.el:451
Reverting buffer `emacs-test-cjR4uH-autorevert-2'
   passed  6/7  auto-revert-test06-write-file (0.136182 sec)
Reverting buffer `emacs-test-EnNjg7-autorevert'
Reverting buffer `emacs-test-EnNjg7-autorevert-0'
Reverting buffer `emacs-test-EnNjg7-autorevert-1'
Reverting buffer `emacs-test-EnNjg7-autorevert-2'
Reverting buffer `emacs-test-EnNjg7-autorevert-3'
Reverting buffer `emacs-test-EnNjg7-autorevert-4'
Reverting buffer `emacs-test-EnNjg7-autorevert-5'
Reverting buffer `emacs-test-EnNjg7-autorevert-6'
Reverting buffer `emacs-test-EnNjg7-autorevert-7'
Reverting buffer `emacs-test-EnNjg7-autorevert-8'
Reverting buffer `emacs-test-EnNjg7-autorevert-9'
   passed  7/7  auto-revert-test07-auto-revert-several-buffers (5.077571 sec)

Ran 7 tests, 6 results as expected, 1 unexpected (2024-10-19 11:03:12+0200, 14.040452 sec)

1 unexpected results:
   FAILED  auto-revert-test05-global-notify

make[1]: *** [Makefile:185: lisp/autorevert-tests.log] Error 1
make[1]: Leaving directory '/home/albinus/src/emacs/test'
make: *** [Makefile:251: lisp/autorevert-tests] Error 2
make: Leaving directory '/home/albinus/src/emacs/test'
--8<---------------cut here---------------end--------------->8---

Could you pls check what's up?

> Best Regards, Lin

Best regards, Michael.




This bug report was last modified 177 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.