Commit d806ab68 authored by Ken Manheimer's avatar Ken Manheimer
Browse files

* allout.el (allout-hide-by-annotation, allout-flag-region): Reduce

possibility of overlay leakage by making them volatile.

* allout-widgets.el (allout-widgets-tally): Define as nil so the hash is
not shared between buffers.  Mode initialization is responsible for giving
it a useful starting value.
(allout-item-span): Reduce possibility of overlay leakage by making them
volatile.
(allout-widgets-count-buttons-in-region): Add diagnostic function for
tracking down overlay leaks.
parent 94eab1c8
2011-03-29 Ken Manheimer <ken.manheimer@gmail.com>
* allout.el (allout-hide-by-annotation, allout-flag-region):
Reduce possibility of overlay leakage by making them volatile.
* allout-widgets.el (allout-widgets-tally): Define as nil so the
hash is not shared between buffers. Mode initialization is
responsible for giving it a useful starting value.
(allout-item-span): Reduce possibility of overlay leakage by
making them volatile.
(allout-widgets-count-buttons-in-region): Add diagnostic function
for tracking down button overlay leaks.
2011-03-29 Leo Liu <sdl.web@gmail.com> 2011-03-29 Leo Liu <sdl.web@gmail.com>
   
* ido.el (ido-read-internal): Use the default history var * ido.el (ido-read-internal): Use the default history var
......
...@@ -238,7 +238,7 @@ buffer, and tracking increases as new widgets are added and ...@@ -238,7 +238,7 @@ buffer, and tracking increases as new widgets are added and
decreases as obsolete widgets are garbage collected." decreases as obsolete widgets are garbage collected."
:type 'boolean :type 'boolean
:group 'allout-widgets-developer) :group 'allout-widgets-developer)
(defvar allout-widgets-tally (make-hash-table :test 'eq :weakness 'key) (defvar allout-widgets-tally nil
"Hash-table of existing allout widgets, for debugging. "Hash-table of existing allout widgets, for debugging.
Table is maintained iff `allout-widgets-maintain-tally' is non-nil. Table is maintained iff `allout-widgets-maintain-tally' is non-nil.
...@@ -2100,6 +2100,7 @@ previously established or is not moved." ...@@ -2100,6 +2100,7 @@ previously established or is not moved."
(cond ((not overlay) (when start (cond ((not overlay) (when start
(setq overlay (make-overlay start end nil t nil)) (setq overlay (make-overlay start end nil t nil))
(overlay-put overlay 'button item-widget) (overlay-put overlay 'button item-widget)
(overlay-put overlay 'evaporate t)
(widget-put item-widget :span-overlay overlay) (widget-put item-widget :span-overlay overlay)
t)) t))
;; report: ;; report:
...@@ -2343,6 +2344,19 @@ The elements of LIST are not copied, just the list structure itself." ...@@ -2343,6 +2344,19 @@ The elements of LIST are not copied, just the list structure itself."
(while (consp list) (push (pop list) res)) (while (consp list) (push (pop list) res))
(prog1 (nreverse res) (setcdr res list))) (prog1 (nreverse res) (setcdr res list)))
(car list))) (car list)))
;;;_ . allout-widgets-count-buttons-in-region (start end)
(defun allout-widgets-count-buttons-in-region (start end)
"Debugging/diagnostic tool - count overlays with 'button' property in region."
(interactive "r")
(setq start (or start (point-min))
end (or end (point-max)))
(if (> start end) (let ((interim start)) (setq start end end interim)))
(let ((button-overlays (delq nil
(mapcar (function (lambda (o)
(if (overlay-get o 'button)
o)))
(overlays-in start end)))))
(length button-overlays)))
;;;_ : Run unit tests: ;;;_ : Run unit tests:
(defun allout-widgets-run-unit-tests () (defun allout-widgets-run-unit-tests ()
......
...@@ -4489,8 +4489,9 @@ Topic exposure is marked with text-properties, to be used by ...@@ -4489,8 +4489,9 @@ Topic exposure is marked with text-properties, to be used by
;; advance to just after end of this annotation: ;; advance to just after end of this annotation:
(setq next (allout-next-single-char-property-change (setq next (allout-next-single-char-property-change
(point) 'allout-was-hidden nil end)) (point) 'allout-was-hidden nil end))
(overlay-put (make-overlay prev next nil 'front-advance) (let ((o (make-overlay prev next nil 'front-advance)))
'category 'allout-exposure-category) (overlay-put o 'category 'allout-exposure-category)
(overlay-put o 'evaporate t))
(allout-deannotate-hidden prev next) (allout-deannotate-hidden prev next)
(setq prev next) (setq prev next)
(if next (goto-char next))))) (if next (goto-char next)))))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment