20220607a
The focus was on testing the Linux target, which now seems stable.
NodeBase
- Implement
SysFile.GetLine
for erasing the\r
from endlines in files created on Windows but read on Linux. - Rename
SysThreadStack
toSysStackTrace
. - Implement
SysStackTrace.Demangle
targets for Linux and Windows. - Implement
SysThread.Pause
so a thread can sleep while waiting for itsThread
to finish construction. - Implement
InitThread.RunningTicks
as a rough monotonic clock that doesn't advance during restarts and breakpoints. - Exit a thread if it has run for ~1 second and its
Thread
still isn't finished construction. - Implement
SlabHeap.Validate
. - If
RootThread
will not initiate a restart on a scheduling timeout, limit it to one log every 3 seconds. - Fix bug: create
ThreadRegistry
beforeRootThread
and add some missing mutexes when accessing itsthreads_
member. - Fix bug: if the platform quickly reused a native thread identifier, the new thread with that identifier failed to start because its identifier was still registered as deleted in
ThreadRegistry.threads_
. - Fix bug: don't invoke
Destroy
on aThread
that is markeddeleting_
.
NetworkBase
- Deleting a socket does not unblock
recvfrom
on Linux, so have aUdpIoThread
send itself a message to unblock when it wants to exit during a restart.
CodeTools
- Remove the
SourcePath
directory from the file paths in>check
output and change\
separators to/
: this eliminates noise in diffs when a>check
obtained on Windows is compared with one obtained on Linux. - Fix bug: when a name refers to a function, its interim referent wasn't updated after argument matching selected the correct function.
- Fix bug: when setting an interim referent, prefer a non-static function to a static one: this adds an implicit
this
argument to the function call, which is needed to match with a non-static function, but which is ignored when matching with a static function.
Known deficiencies
-
The following recovery tests fail on Linux:
- invoking
std::terminate
(currently a problem in Windows release builds as well) - trapping while handling an exception
- trapping in a destructor
- Ctrl-C to interrupt a thread
The first three are because of the gcc compiler. The last one appears to be because WSL doesn't pass a Ctrl-C to the Linux console.
- invoking
-
There are minor differences between
>check
and>export
results obtained on Windows as opposed to Linux. -
RscLauncher
still hasn't been tested on Linux.