1.0.17.26: Fix regression in LOAD
[sbcl.git] / tests / deadline.impure.lisp
index 32d19f6..5d24ec9 100644 (file)
@@ -9,14 +9,46 @@
 
 
 (assert-timeout
- (sb-impl::with-deadline (:seconds 1)
-   (run-program "sleep" '("5") :search t :wait t)))
+ (sb-sys:with-deadline (:seconds 1)
+   (run-program "sleep" '("3") :search t :wait t)))
+
+(let ((n 0)
+      (final nil))
+  (handler-case
+      (handler-bind ((sb-sys:deadline-timeout (lambda (c)
+                                                (when (< n 2)
+                                                  (incf n)
+                                                  (sb-sys:defer-deadline 0.1 c)))))
+        (sb-sys:with-deadline (:seconds 1)
+          (run-program "sleep" '("2") :search t :wait t)))
+    (sb-sys:deadline-timeout (c)
+      (setf final c)))
+  (assert (= n 2))
+  (assert final))
+
+(let ((n 0)
+      (final nil))
+  (handler-case
+      (handler-bind ((sb-sys:deadline-timeout (lambda (c)
+                                                (incf n)
+                                                (sb-sys:defer-deadline 0.1 c))))
+        (sb-sys:with-deadline (:seconds 1)
+          (run-program "sleep" '("2") :search t :wait t)))
+    (sb-sys:deadline-timeout (c)
+      (setf final c)))
+  (assert (plusp n))
+  (assert (not final)))
 
 #+(and sb-thread (not sb-lutex))
 (progn
   (assert-timeout
-   (let ((lock (sb-thread:make-mutex)))
-     (sb-thread:make-thread (lambda () (sb-thread:get-mutex lock) (sleep 5)))
+   (let ((lock (sb-thread:make-mutex))
+         (waitp t))
+     (sb-thread:make-thread (lambda ()
+                              (sb-thread:get-mutex lock)
+                              (setf waitp nil)
+                              (sleep 5)))
+     (loop while waitp do (sleep 0.01))
      (sb-impl::with-deadline (:seconds 1)
        (sb-thread:get-mutex lock))))