Several changes to the Genera implementation:
commitb0ecc839768e1317f74b363145327cba2a9aec8f
authorGary Palter <palter@clozure.com>
Sun, 7 Jun 2020 16:53:29 +0000 (7 12:53 -0400)
committerStelian Ionescu <sionescu@cddr.org>
Sun, 7 Jun 2020 20:05:19 +0000 (7 16:05 -0400)
tree94c1395ef6d64a54ed054c22fdb1cde8dfc4a245
parent4ec66358be8f02e8fc9b7d0d9ff8ff757a1854f2
Several changes to the Genera implementation:

Update the locking functions to match the specification. Replace the implementation of
recursive locks with one that actually works. (The prior implementation would fail horribly if
RELEASE-RECURSIVE-LOCK wasn't called in the exact reverse order across all threads.) And,
implement the :TIMEOUT key to WITH-RECURSIVE-LOCK-HELD but only if the value is NIL or 0.

With these changes to locking, add the TIMEOUT keyword to CONDITION-WAIT.  Genera now passes
the new tests in the test suite for CONDITION-WAIT with timeout and all the semaphore tests.

Implement the proper semantics for JOIN-THREAD by storing the thread's return value in a spare
slot of the SI:PROCESS object.

Add a native implementation of WITH-TIMEOUT.
src/bordeaux-threads.lisp
src/impl-genera.lisp
test/bordeaux-threads-test.lisp