X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ffinal.lisp;h=fc807f47aa3e644a54cf50cb97887d6b62347501;hb=95591ed483dbb8c0846c129953acac1554f28809;hp=8b21939e3d7ad3f2e8ee5bd9454047b5fdc4b966;hpb=068cf4b55af3f8f8acf2c7c06869441612261cd4;p=sbcl.git diff --git a/src/code/final.lisp b/src/code/final.lisp index 8b21939..fc807f4 100644 --- a/src/code/final.lisp +++ b/src/code/final.lisp @@ -11,13 +11,13 @@ (in-package "SB!IMPL") -(defvar *finalizer-store* nil) +(defglobal **finalizer-store** nil) -(defvar *finalizer-store-lock* +(defglobal **finalizer-store-lock** (sb!thread:make-mutex :name "Finalizer store lock.")) (defmacro with-finalizer-store-lock (&body body) - `(sb!thread::with-system-mutex (*finalizer-store-lock* :without-gcing t) + `(sb!thread::with-system-mutex (**finalizer-store-lock** :without-gcing t) ,@body)) (defun finalize (object function &key dont-save) @@ -70,13 +70,13 @@ Examples: (error "Cannot finalize NIL.")) (with-finalizer-store-lock (push (list (make-weak-pointer object) function dont-save) - *finalizer-store*)) + **finalizer-store**)) object) (defun deinit-finalizers () ;; remove :dont-save finalizers (with-finalizer-store-lock - (setf *finalizer-store* (delete-if #'third *finalizer-store*))) + (setf **finalizer-store** (delete-if #'third **finalizer-store**))) nil) (defun cancel-finalization (object) @@ -86,8 +86,8 @@ Examples: ;; run. (when object (with-finalizer-store-lock - (setf *finalizer-store* - (delete object *finalizer-store* + (setf **finalizer-store** + (delete object **finalizer-store** :key (lambda (list) (weak-pointer-value (car list)))))) object)) @@ -95,12 +95,12 @@ Examples: (defun run-pending-finalizers () (let (pending) (with-finalizer-store-lock - (setf *finalizer-store* + (setf **finalizer-store** (delete-if (lambda (list) (when (null (weak-pointer-value (car list))) (push (second list) pending) t)) - *finalizer-store*))) + **finalizer-store**))) ;; We want to run the finalizer bodies outside the lock in case ;; finalization of X causes finalization to be added for Y. (dolist (fun pending)