LispWorks 6.0.1 Semaphore issue
Hello!
we've had a hard time making LispWorks semaphores work.
Please consider the following code:
(defvar *sem*)
(defun test ()
(setf *sem* (mp:make-semaphore))
(dotimes (x 3)
(mp:process-run-function (format nil "process ~s" x)
'()
(lambda ()
(loop
(mp:semaphore-acquire *sem*)
(mp:semaphore-release *sem*))))))
The test function should create 3 processes and allow only one to enter
the critical section and make the other two wait.
However, after few iterations all three processes stop at
(mp:semaphore-acquire *sem*) and are waiting for the semaphore and none
of them continues into the critical section.
We tried to inspect the semaphore stored in *sem* and there was -1 in
slot MP::FREE-COUNT - we believe that this slot should contain
non-negative integers only.
We are using LispWorks 6.0.1 Personal on Windows 7 and on MacOS X.
Have you encountered such behavior? Is it possibly a bug in LispWorks?
Thank you very much for your time.
Andrew