X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Futils.lisp;h=51eef9ebe20b5ff52a1c9c7bbaf821279a37f175;hp=e6176cbb0a18f110620931938172e74b91472d3b;hb=158319d9e98eabc92b285c2cbabec71b085aed46;hpb=ef1af699cee8a79486bb3db7f75193bc32121f44 diff --git a/sql/utils.lisp b/sql/utils.lisp index e6176cb..51eef9e 100644 --- a/sql/utils.lisp +++ b/sql/utils.lisp @@ -57,11 +57,24 @@ (string identifier)))) (substitute #\_ #\- unescaped))) +#+lispworks +(defvar +lw-has-without-preemption+ + #+lispworks6 nil + #-lispworks6 t) +#+lispworks +(defvar +lw-global-lock+ + (unless +lw-has-without-preemption+ + (mp:make-lock :name "CLSQL" :important-p nil :safep t :recursivep nil))) + (defmacro without-interrupts (&body body) #+allegro `(mp:without-scheduling ,@body) #+clisp `(progn ,@body) #+cmu `(system:without-interrupts ,@body) - #+lispworks `(mp:without-preemption ,@body) + #+lispworks + (if +lw-has-without-preemption+ + `(mp:without-preemption ,@body) + `(mp:with-exclusive-lock (+lw-global-lock+) + ,@body)) #+openmcl `(ccl:without-interrupts ,@body) #+sbcl `(sb-sys::without-interrupts ,@body))