Tue Jun 30 22:54:49 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* CLISP workaround finalizer for objects in weak hash table crash.
hunk ./src/clos.lisp 261
- (cancel-finalization object)
+ (remove-finalizer object)
hunk ./src/clos.lisp 304
- (cancel-finalization converted-value)
+ (remove-finalizer converted-value)
hunk ./src/clos.lisp 475
- (cancel-finalization object)
+ (remove-finalizer object)
hunk ./src/clos.lisp 485
- (let ((finalizer (make-finalize object)))
- (finalize object finalizer)))
+ (set-finalizer object))
hunk ./src/object-map.lisp 24
- #-cmucl (make-weak-hash-table :weakness #-clisp weakness
- ;; CLISP crash with weak hash table
- ;; leak memory (see also: #'keep-wrapper)
- #+clisp nil)
+ #-cmucl (make-weak-hash-table :weakness weakness)
hunk ./src/object-map.lisp 72
+(declaim (inline remove-finalizer))
+(defun remove-finalizer (object)
+ #-clisp
+ (cancel-finalization object)
+ #+clisp
+ (when (typep object 'smoke-standard-object)
+ (cancel-finalization (slot-value object 'finalizer))))
+
+(declaim (inline set-finalizer))
+(defun set-finalizer (object)
+ #-clisp
+ (finalize object (make-finalize object))
+ #+clisp
+ (finalize (slot-value object 'finalizer) (make-finalize object)))
+
hunk ./src/objects/stack.lisp 46
+ #+clisp (finalizer :type list :initform (list nil))