publish new release
[clsql.git] / sql / utils.lisp
index e6176cbb0a18f110620931938172e74b91472d3b..fe5a24ce63aa930444708a10bbc233d929b49c67 100644 (file)
                      (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
+                  :sharing t)))
+
 (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))