summaryrefslogtreecommitdiff
path: root/modules/config-utilities.el
diff options
context:
space:
mode:
Diffstat (limited to 'modules/config-utilities.el')
-rw-r--r--modules/config-utilities.el20
1 files changed, 20 insertions, 0 deletions
diff --git a/modules/config-utilities.el b/modules/config-utilities.el
index 8d094fda..4ed086d1 100644
--- a/modules/config-utilities.el
+++ b/modules/config-utilities.el
@@ -7,6 +7,8 @@
;;; Code:
(require 'cl-lib)
+(require 'cl-generic)
+(require 'eieio)
(require 'find-lisp)
(require 'profiler)
@@ -45,6 +47,24 @@
(keymap-set cj/debug-config-keymap "t" #'toggle-debug-on-error)
+;;; ----------------------------- Package Workarounds --------------------------
+
+;; EmacSQL 4.3.1 registers finalizers that call `emacsql-close'. The sqlite
+;; backends set their handle slot to nil after an explicit close, so a later
+;; finalizer can otherwise call `sqlite-close' with nil and log:
+;; finalizer failed: (wrong-type-argument sqlitep nil)
+(with-eval-after-load 'emacsql-sqlite-builtin
+ (cl-defmethod emacsql-close :around
+ ((connection emacsql-sqlite-builtin-connection))
+ (when (oref connection handle)
+ (cl-call-next-method))))
+
+(with-eval-after-load 'emacsql-sqlite-module
+ (cl-defmethod emacsql-close :around
+ ((connection emacsql-sqlite-module-connection))
+ (when (oref connection handle)
+ (cl-call-next-method))))
+
;;; -------------------------------- Benchmarking -------------------------------
(defmacro with-timer (title &rest forms)