[cffi-devel] cmucl callback patch
Bart Botta
00003b at gmail.com
Sun Nov 12 09:28:48 UTC 2006
Following patch lets cffi callbacks survive saving/loading a core on
CMUCL, tested on 19dpre2
(also works on 19c with (pushnew #'system::reinitialize-global-table
ext:*AFTER-SAVE-INITIALIZATIONS*)
not sure if that is something cffi should do for 19c or not though)
diff -rN -u old-cffi/src/cffi-cmucl.lisp new-cffi/src/cffi-cmucl.lisp
--- old-cffi/src/cffi-cmucl.lisp 2006-11-12 03:27:51.000000000 -0600
+++ new-cffi/src/cffi-cmucl.lisp 2006-11-12 03:27:51.000000000 -0600
@@ -320,6 +320,18 @@
(error "Undefined callback: ~S" name))
pointer))
+;;; cmucl makes new callback trampolines when it reloads, so we need to
+;;; update cffi's copies
+(defun reset-callbacks ()
+ (loop
+ for k being the hash-keys of *CALLBACKS*
+ do (setf (gethash k *callbacks*)
+ (alien::symbol-trampoline (cffi-sys::intern-callback k)))))
+
+;;; needs to be after cmucl's restore-callbacks, so put at the end...
+(setf ext:*after-save-initializations*
+ (append ext:*after-save-initializations* (list 'reset-callbacks)))
+
;;;# Loading and Closing Foreign Libraries
;;; Work-around for compiling ffi code without loading the
More information about the cffi-devel
mailing list