From: Douglas K. <do...@go...> - 2014-08-12 03:06:14
|
Yah,ignore my last remark. That was dumb. The issue is allocate-code-object on gencgc. Here's a 100% reliable way to hang the system. Usually it prints I=1, I=2, then stops. (defun busybee (&aux (rs (make-random-state))) (declare (notinline make-array)) (loop repeat 100 do (do-all-symbols (s) (declare (ignore s)) (if (zerop (random 2 rs)) (make-array '(256)) (sb-c:allocate-code-object 5 100))))) (defun hangme () (let ((i 0)) (loop (print (incf i)) (let ((t1 (sb-thread:make-thread #'busybee)) (t2 (sb-thread:make-thread #'busybee))) (let ((r1 (print (sb-thread:join-thread t1))) (r2 (print (sb-thread:join-thread t2)))) r1 r2))))) |