[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org 79971b7: org-element.el: Prevent cache key collisio
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org 79971b7: org-element.el: Prevent cache key collisions |
Date: |
Thu, 21 Oct 2021 11:57:43 -0400 (EDT) |
branch: externals/org
commit 79971b748df36c3b48455965123e3fab8075b07f
Author: Ihor Radchenko <yantar92@gmail.com>
Commit: Ihor Radchenko <yantar92@gmail.com>
org-element.el: Prevent cache key collisions
* lisp/org-element.el (org-element--cache-sync,
org-element-cache-reset): Do not use `buffer-chars-modified-tick' as
`org-element--cache-sync-keys-value'. Instead, make sure that
`org-element--cache-sync-keys-value' is always changed upon completing
cache request sequence. Using `buffer-chars-modified-tick' can
trigger using obsolete sync keys after we add elements to cache via
`org-element--parse-to' after cache sync is completed, but no other
changes were made in the buffer. The newly added elements are then
not comparable with the obsolete sync keys.
(org-element--cache-persist-before-write): Cleanup
`:org-element--cache-sync-key' from elements before saving element
cache to file. If we do not do it, obsolete keys may be reused
inintentionally during next Emacs session.
---
lisp/org-element.el | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index ca9ba67..9b994b8 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -5843,7 +5843,7 @@ updated before current modification are actually
submitted."
;; Otherwise, reset keys.
(if org-element--cache-sync-requests
(org-element--cache-set-timer buffer)
- (setq org-element--cache-sync-keys-value
(buffer-chars-modified-tick))))))))
+ (setq org-element--cache-sync-keys-value (1+
org-element--cache-sync-keys-value))))))))
(defun org-element--cache-process-request
(request next-request-key threshold time-limit future-change)
@@ -6819,6 +6819,12 @@ Return non-nil when verification failed."
org-element-cache-persistent
(eq var 'org-element--cache))
(with-current-buffer buffer
+ ;; Cleanup cache request keys to avoid collisions during next
+ ;; Emacs session.
+ (avl-tree-mapc
+ (lambda (el)
+ (org-element-put-property el :org-element--cache-sync-key nil))
+ org-element--cache)
(org-with-wide-buffer
(org-element-at-point (point-max))))
nil))
@@ -6872,7 +6878,7 @@ buffers."
(avl-tree-create #'org-element--cache-compare))
(setq-local org-element--cache-size 0)
(setq-local org-element--headline-cache-size 0)
- (setq-local org-element--cache-sync-keys-value
(buffer-chars-modified-tick))
+ (setq-local org-element--cache-sync-keys-value 0)
(setq-local org-element--cache-change-warning nil)
(setq-local org-element--cache-sync-requests nil)
(setq-local org-element--cache-sync-timer nil)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/org 79971b7: org-element.el: Prevent cache key collisions,
ELPA Syncer <=