- Use memmove instead of memcpy for potentially overlapping moves.
- Fix memory leaks in error paths.
- Fix potential NULL pointer references
- Assure that string copies stay within bounds of the destination string and
are NUL terminated
- Fix NULL pointer dereferencing in help routines
remove()'s behavior was extended to perform either a unlink() and if
that failed, a rmdir(). This is not consistent with the native commands
del or rm since they only remove a file but not a directory.
This allows a device simulator to specifically name the units that it uses
for different purposes. This info is visible in the output of SHOW QUEUE
and debug output.
Once specified or dynamically determined (as previously occurred with
each call to sim_uname()), that name is saved for fast delivery on subsequent
calls. This will remove some overhead when running with debugging on.
The fprintf substitute function Fprintf can call tmxr_linemsgvf which may
internally produce debug output thus producing an infinite recursion.
All writes to the debug file are now done by explicit calls to fwrite() OR the
Fprintf socket destination is saved and cleared during all calls to fprintf.
Add consistent debug options to track TODR activities and the values which
are set. Debug data will display the VMS time related to the values set and
read.
Added debug CHECK option to the sim_timer_activate_after() to verify
that coscheduled events actually have sim_activate_time_usecs() results
which are consistent with each other.
Additionally, coschedule tick processing now properly counts down
pending coschedule queued activities.
- Add support to query remaining usecs on pending events.
- Generalized the sim_interval adjustment in sim_idle to allow more than
a single decrement.
- More overhead reduction when idling.
- Carry usec values as double through out to fully support long wall clock
delays.
- Support for arbitrary long wait intervals in sim_activate_after with
precisely correct delays aligned with the calibrated clock once
per second.
- Proper handling of calls to sim_cancel for calibrated timer units
- Properly allow stopping of calibrated clock by calling sim_rtcn_calb
with a ticksper == 0
- Only schedule asynchronous timer activities for delays longer than
the minimal OS sleep time
- Only wake asynchronous timer thread to queue new timer events
that are shorter than the currently shortest scheduled event