forked from mirrors/org-mode
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.
This commit is contained in:
parent
4eab5bd3f0
commit
79971b748d
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue