branch: externals/gcmh commit 12fd03c7c0915b2ae470e77e6600ad04f7f67dde Author: Andrea Corallo <andrea.cora...@arm.com> Commit: Andrea Corallo <andrea.cora...@arm.com>
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)