Chris Hanson [Thu, 29 Apr 1993 05:24:34 +0000 (05:24 +0000)]
Change keyboard interrupt code so that all interrupt activity occurs
inside the event transmitted to the console port's owner. This stuff
can't be done directly by the interrupt handler because it can be
executed when there is no thread at all.
Chris Hanson [Wed, 28 Apr 1993 19:51:10 +0000 (19:51 +0000)]
Don't use BLOCK-THREAD-EVENTS to prevent the previewer from running --
there's a window in which an event can be delivered, causing a
character to be queued; but READ-EVENT doesn't look at the queue after
it's in that state.
Chris Hanson [Tue, 27 Apr 1993 09:44:01 +0000 (09:44 +0000)]
This runtime requires microcode version 11.131 or later. Edwin
versions prior to 3.78 will not work correctly with this runtime.
The aim of these changes is to provide a central mechanism to detect
input on all input channels, and thus to prevent a single thread from
performing a blocking input operation that locks out other threads
that can do useful work. Now, in places where a thread would block on
an input device, it instead registers its interest in the device
with a centralized registry, and suspends. If all threads in the
system are suspended, then Scheme blocks by calling `select' and
waiting for something interesting to happen.
* Introduce new procedures that use the `select' system call to
provide a mechanism to monitor input availability on many input
devices simultaneously:
These procedures require the operating system to support `select' or
some equivalent. Calling them in another operating system, e.g.
DOS, will cause an error to be signalled.
* Delete old `select' mechanism procedures which are no longer used or
supported (these will be deleted from the microcode in the future):
* Modify CHANNEL-READ to automatically call TEST-FOR-INPUT-ON-CHANNEL
if the `select' system call is supported by the operating system.
One consequence of this is that CHANNEL-READ can return #F for
channels that are in "blocking" mode; if you don't want #F you must
call CHANNEL-READ-BLOCK instead (this was always a good idea
anyway).
* Change X graphics devices to use the new select machinery to preview
the event stream from the X server.
--------------------
The following changes are not part of the general aim stated above,
although most of them either derive from it or support it:
* Add new procedures to the "threads" package: (THREADS-LIST) returns
a list of all thread objects, including dead threads, that haven't
yet been garbage collected. (THREAD-EXECUTION-STATE thread) returns
the "execution state" of a thread, a symbol.
* Add code to the threads package that attempts to clean up all
attachments of the thread when it is exited. This is a
generalization of previous patches generated by GJR and GJS for
6.001.
* Plug several holes in the thread event delivery mechanism which
allowed the threads package to get into states where events were not
delivered to their threads.
* SUSPEND-CURRENT-THREAD now returns the event that caused the thread
the be resumed; previously it had an unspecified value. If several
events are delivered before resumption, the event returned is the
first one that is not #F, or #F if all of the events were #F.
* Fix several typos that caused errors when generating reports for
conditions in the threads package.
Chris Hanson [Tue, 27 Apr 1993 09:22:32 +0000 (09:22 +0000)]
These changes require microcode 11.131 and runtime 14.161. The
changes are a redesign of the keyboard input, subprocess, and inferior
thread communication mechanisms to use the new `select' interface
support. The changes should not be visible to users or customizers.
Chris Hanson [Tue, 27 Apr 1993 09:14:12 +0000 (09:14 +0000)]
This runtime requires microcode version 11.131 or later. Edwin
versions prior to 3.78 will not work correctly with this runtime.
The aim of these changes is to provide a central mechanism to detect
input on all input channels, and thus to prevent a single thread from
performing a blocking input operation that locks out other threads
that can do useful work. Now, in places where a thread would block on
an input device, it instead registers its interest in the device
with a centralized registry, and suspends. If all threads in the
system are suspended, then Scheme blocks by calling `select' and
waiting for something interesting to happen.
* Introduce new procedures that use the `select' system call to
provide a mechanism to monitor input availability on many input
devices simultaneously:
These procedures require the operating system to support `select' or
some equivalent. Calling them in another operating system, e.g.
DOS, will cause an error to be signalled.
* Delete old `select' mechanism procedures which are no longer used or
supported (these will be deleted from the microcode in the future):
* Modify CHANNEL-READ to automatically call TEST-FOR-INPUT-ON-CHANNEL
if the `select' system call is supported by the operating system.
One consequence of this is that CHANNEL-READ can return #F for
channels that are in "blocking" mode; if you don't want #F you must
call CHANNEL-READ-BLOCK instead (this was always a good idea
anyway).
* Change X graphics devices to use the new select machinery to preview
the event stream from the X server.
--------------------
The following changes are not part of the general aim stated above,
although most of them either derive from it or support it:
* Add new procedures to the "threads" package: (THREADS-LIST) returns
a list of all thread objects, including dead threads, that haven't
yet been garbage collected. (THREAD-EXECUTION-STATE thread) returns
the "execution state" of a thread, a symbol.
* Add code to the threads package that attempts to clean up all
attachments of the thread when it is exited. This is a
generalization of previous patches generated by GJR and GJS for
6.001.
* Plug several holes in the thread event delivery mechanism which
allowed the threads package to get into states where events were not
delivered to their threads.
* SUSPEND-CURRENT-THREAD now returns the event that caused the thread
the be resumed; previously it had an unspecified value. If several
events are delivered before resumption, the event returned is the
first one that is not #F, or #F if all of the events were #F.
* Fix several typos that caused errors when generating reports for
conditions in the threads package.
Chris Hanson [Tue, 27 Apr 1993 08:43:07 +0000 (08:43 +0000)]
Fix two bugs related to inheritance: CONDITION-PREDICATE and
CONDITION-ACCESSOR did not allow a condition of an inherited type as
an argument, and MAKE-CONDITION-TYPE would incorrectly compute the
number of fields in a condition type which overrode one of the field
names in its generalization.
Chris Hanson [Tue, 27 Apr 1993 08:38:16 +0000 (08:38 +0000)]
These changes affect any code using the SELECT-REGISTRY-TEST
primitive. Runtime 14.161 requires this microcode revision or later,
but older bands can run over this microcode.
* Change interface to SELECT-REGISTRY-TEST. Order or second and third
arguments is reversed. Third argument is changed from a select
registry to a vector. Primitive returns a nonnegative integer
indicating the number of descriptors that were stored in the vector,
or a negative integer indicating that nothing is stored and that
another interesting condition holds.
* Add new primitive SELECT-DESCRIPTOR, a simplified version of
SELECT-REGISTRY-TEST that works for a single descriptor and does not
require consing in the interface.
Jason Wilson [Tue, 20 Apr 1993 18:26:25 +0000 (18:26 +0000)]
"Fixed" a bug in tags-search having to do with the case-sensitivty
arguement. we now accept this argument but do nothing with it. This
should be fixed at some point.