Fix bug in search_for_primitive. If the second allocate_marked_vector
call aborted because of a GC, the global variables were left in an
inconsistent state.
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.