# hang the test-suite, as the typical failure mode used to be SBCL
# hanging uninterruptible in GC.
-echo //entering finalize.test.sh
+. ./subr.sh
+
+use_test_subdirectory
-rm -f finalize-test-passed finalize-test-failed
+echo //entering finalize.test.sh
-${SBCL:-sbcl} <<EOF > /dev/null &
+# $! is not set correctly when calling run_sbcl, do it directly
+"$SBCL_RUNTIME" --core "$SBCL_CORE" $SBCL_ARGS <<EOF > /dev/null &
(defvar *tmp* 0.0)
(defvar *count* 0)
(declare (ignore _))
nil)
-(let ((junk (mapcar (lambda (_)
- (declare (ignore _))
- (let ((x (gensym)))
- (finalize x (lambda ()
- ;; cons in finalizer
- (setf *tmp* (make-list 10000))
- (incf *count*)))
- x))
- (make-list 10000))))
+(let ((junk (mapcar (compile nil '(lambda (_)
+ (declare (ignore _))
+ (let ((x (gensym)))
+ (finalize x (lambda ()
+ ;; cons in finalizer
+ (setf *tmp* (make-list 10000))
+ (incf *count*)))
+ x)))
+ (make-list 10000))))
(setf junk (foo junk))
(foo junk))
EOF
SBCL_PID=$!
-WAITED=0
+WAITED=x
echo "Waiting for SBCL to finish stress-testing finalizers"
while true; do
if [ -f finalize-test-passed ]; then
echo "OK"
rm finalize-test-passed
- exit 104 # Success
+ exit $EXIT_TEST_WIN
elif [ -f finalize-test-failed ]; then
echo "Failed"
rm finalize-test-failed
- exit 1 # Failure
+ exit $EXIT_LOSE
fi
sleep 1
- WAITED=$(($WAITED+1))
- if (($WAITED>60)); then
+ WAITED="x$WAITED"
+ if [ $WAITED = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ]; then
echo
echo "timeout, killing SBCL"
kill -9 $SBCL_PID
- exit 1 # Failure, SBCL probably hanging in GC
+ exit $EXIT_LOSE # Failure, SBCL probably hanging in GC
fi
done