From: <me...@us...> - 2005-10-11 14:26:30
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4003/src/compiler/x86 Modified Files: macros.lisp Log Message: 0.9.5.36: nop * (ALIEN-FUNCALL ... (GET-LISP-OBJ-ADDRESS OBJ)) is racy with non-conservative gcs. Add a few WITH-PINNED-OBJECTS to the threading code in anticipation of exact gcs. Index: macros.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/macros.lisp,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- macros.lisp 26 Aug 2005 22:16:47 -0000 1.28 +++ macros.lisp 11 Oct 2005 14:26:32 -0000 1.29 @@ -455,8 +455,12 @@ `(multiple-value-prog1 (progn ,@(loop for p in objects - collect `(push-word-on-c-stack - (int-sap (sb!kernel:get-lisp-obj-address ,p)))) + collect + ;; There is no race here wrt to gc, because at every + ;; point during the execution there is a reference to + ;; P on the stack or in a register. + `(push-word-on-c-stack + (int-sap (sb!kernel:get-lisp-obj-address ,p)))) ,@body) ;; If the body returned normally, we should restore the stack pointer ;; for the benefit of any following code in the same function. If |