branch: externals/gcmh
commit 12fd03c7c0915b2ae470e77e6600ad04f7f67dde
Author: Andrea Corallo <[email protected]>
Commit: Andrea Corallo <[email protected]>
Set the new timer for running once and on post-command-hook
---
gcmh.el | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/gcmh.el b/gcmh.el
index dd9f2a6..c81e698 100644
--- a/gcmh.el
+++ b/gcmh.el
@@ -72,6 +72,14 @@ cause OS paging."
This is to be used with the `pre-command-hook'."
(setq gc-cons-threshold gcmh-high-cons-threshold))
+(defun gcmh-register-idle-timer ()
+ "Register a timer to run `gcmh-idle-garbage-collect'.
+Cancel the previous one if present."
+ (when (timerp gcmh-idle-timer)
+ (cancel-timer gcmh-idle-timer))
+ (setf gcmh-idle-timer
+ (run-with-idle-timer gcmh-idle-delay nil #'gcmh-idle-garbage-collect)))
+
(defun gcmh-idle-garbage-collect ()
"Run garbage collection after `gcmh-idle-delay'."
(if gcmh-verbose
@@ -96,15 +104,14 @@ This is to be used with the `pre-command-hook'."
(cancel-timer gcmh-idle-timer))
(if gcmh-mode
(progn
- (setq gc-cons-threshold gcmh-high-cons-threshold
- ;; When idle for gcmh-idle-delay, run the GC no matter what.
- gcmh-idle-timer (run-with-idle-timer gcmh-idle-delay t
-
#'gcmh-idle-garbage-collect))
- ;; Release severe GC strategy before the user restart to working
- (add-hook 'pre-command-hook #'gcmh-set-high-threshold))
+ (setf gc-cons-threshold gcmh-high-cons-threshold)
+ ;; Release severe GC strategy before the user restart to working
+ (add-hook 'pre-command-hook #'gcmh-set-high-threshold)
+ (add-hook 'post-command-hook #'gcmh-register-idle-timer))
(setq gc-cons-threshold gcmh-low-cons-threshold
gcmh-idle-timer nil)
- (remove-hook 'pre-command-hook #'gcmh-set-high-threshold)))
+ (remove-hook 'pre-command-hook #'gcmh-set-high-threshold)
+ (remove-hook 'post-command-hook #'gcmh-register-idle-timer)))
(provide 'gcmh)