+ #+openmcl
+ `(ccl:with-lock-grabbed (,lock) ,@body)
+ #-(or allegro cmu lispworks sb-thread openmcl)
+ `(progn ,@body)
+ )
+
+
+(defmacro with-timeout ((seconds) &body body)
+ #+allegro
+ `(mp:with-timeout (,seconds) ,@body)
+ #+cmu
+ `(mp:with-timeout (,seconds) ,@body)
+ #+sb-thread
+ `(sb-ext:with-timeout ,seconds ,@body)
+ #+openmcl
+ `(ccl:process-wait-with-timeout "waiting"
+ (* ,seconds ccl:*ticks-per-second*)
+ #'(lambda ()
+ ,@body) nil)
+ #-(or allegro cmu sb-thread openmcl)
+ `(progn ,@body)