- Initialize READY-{READ,WRITE}-CHANNELS to () instead of #f, because
the #f's don't get overwritten when the whole thing is interrupted.
- Fix the cleanup code which was conditionalized the wrong way.
- extend the VM interrupts to distinguish between read and write
events
- add new ADD-PENDING-CHANNEL instruction to the VM
- add WAIT-FOR-CHANNELS procedure to the run-time system
- implement SELECT and SELECT! on top of that in newports.scm
This runs some basic tests, but in general should be considered
largely untested.
Moreover, SELECT/SELECT! never detect any exceptional conditions---the
returned vectors are always empty. This is because the VM doesn't
really track those, and it's unclear whether it would be worth the
effort.
Scheme 48 1.0.1.
Namely, instead of associating a list of queues with every thread, we
associate a single cell, holding the thread. That cell is stored in
thread queues, and once a thread is made runnable again, the cell is
set to #f. The thread-queue accessors ignore cells containing #f.
Implement an experimental OBTAIN-LOCK-MULTIPLE to test the whole
thing.