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.
Chris Hanson [Wed, 10 Mar 1993 17:57:08 +0000 (17:57 +0000)]
Implement new interface to `select' system call, which allows
construction of "registries" of file descriptors, which can then be
passed in as arguments.
Chris Hanson [Wed, 10 Mar 1993 17:20:04 +0000 (17:20 +0000)]
Add new primitive GC-TRACE-REFERENCES which will compute the set of
objects that point to a given object. This primitive is implemented
only when the compile-time flag ENABLE_GC_DEBUGGING_TOOLS is set.
Chris Hanson [Sun, 7 Mar 1993 20:56:23 +0000 (20:56 +0000)]
Add hooks to the runtime system that are for use by SOS:
* Add a slot to record types to hold the class wrapper so that records
can have classes associated with them, and thus be dispatched on by
generic procedures.
* Maintain a population of record types so that classes can be added
to records retroactively when the object system is loaded.
* Add a new unparser hook that overrides the default unparser for
records that satisfy RECORD? (records with explicit unparsers are
unaffected).
* Add a new unparser hook that may override the representation of
procedures, so that generic procedures can have a special
representation.
* Change the DEFINE-STRUCTURE macro so that record-based structures
don't have an explicit unparser unless the PRINT-PROCEDURE option is
used.
Chris Hanson [Sun, 28 Feb 1993 21:03:50 +0000 (21:03 +0000)]
Eliminate prohibition against using syntactic keywords as variables.
If done properly, we could prohibit top-level variable bindings that
might cause trouble while allowing local bindings; but this requires
redesign of the syntaxer.
Chris Hanson [Thu, 25 Feb 1993 19:59:36 +0000 (19:59 +0000)]
Install missing error checks in various procedures that take lists as
arguments. Replace simple error calls with calls to more specific
error signalling procedures. Change mapping procedures to use
iterative algorithm for multiple-list case.
Chris Hanson [Thu, 25 Feb 1993 19:53:29 +0000 (19:53 +0000)]
Install missing error checks in various procedures that take lists as
arguments. Replace simple error calls with calls to more specific
error signalling procedures. Change mapping procedures to use
iterative algorithm for multiple-list case.