Robust Services Core Versions Save

Robust applications framework in C++. Includes a static analysis tool and two applications.

v0.26.0

2 years ago

NodeBase

  • Implement SlabHeap, which is expandable, and convert all object pools to use it.
  • Rename NbHeap to BuddyHeap.
  • Enhance the >heaps setsize command to indicate what level of restart is required to effect a heap's new size.
  • Move MutexGuard to SysMutex and provide a LockGuard for SysLock.
  • Register a terminate_handler on a per-thread basis, which is what Windows requires.
  • Add a call to _set_abort_behavior to suppress Windows-specific behaviors when abort() is called.

CodeTools

  • Support [[fallthrough]].
  • Prompt the user before erasing init-only or write-only data, so that the edit can be cancelled if desired side effects would be lost.
  • Fix bug: when erasing data accessed by a scope resolution, reference selection, or pointer selection operator, everything up to and including the operator was not erased.
  • Reformat code to eliminate the space after/before the </> used in templates.

Known deficiencies: see Release v0.2.50.

v0.25.0

2 years ago

Builds

  • Move all code under src directory.
  • Convert to CMake for builds.
    • Ninja builds x64 but won't take CMake's -A platform argument, so Visual Studio 17 2022 is used as the CMake generator for x86.
    • Remove .vcxproj files.
  • Support builds using gcc and clang compilers.
  • Fix various warnings from gcc and clang compiles.

Linux Targets

  • Duration: simplified by converting to <chrono> and <ratio>
  • Gate: added to provide portable, interruptable condition variable (similar to Windows' CreateEvent, SetEvent, WaitForSingleObject)
  • Heap: modified to support Linux
  • HeapCfg: added for configuring heap sizes
  • NbHeap : modified to support Linux; now used by all heaps except default heap
  • SysConsole: implemented Linux target
  • SysFile: made portable by converting to <filesystem> (needs C++17)
  • SysHeap: implemented Linux target; now used only for default heap
  • SysLock: made portable by converting to <mutex>
  • SysMemory: implemented Linux target
  • SysMutex: made portable by converting to <mutex>
  • SysSignals: implemented Linux target
  • SysThread: implemented Linux target based on POSIX threads
  • SysThreadStack: implemented Linux target
  • SysTickTimer: replaced by portable SteadyTime, which uses <chrono>
  • SysTime: replaced by portable SystemTime, which uses <chrono>
  • TimePoint: replaced by portable SteadyTime, which uses <chrono>
  • Implemented Linux targets for NetworkBase (SysIpL2Addr, SysIpL3Addr, SysSocket, SysTcpSocket, SysUdpSocket)

NodeBase

  • Create separate RootThread instead of wrapping main thread.
  • Convert all heaps except default heap to NbHeap.
  • Implement CLI command for changing the size of heaps.
  • Use brace initialization for array members in constructor member initialization lists.

CodeTools

  • Add <ratio>, <chrono>, <mutex>, <condition_variable>, and <filesystem> to subs directory.
  • Remove subs files no longer required after eliminating platform-specific code.
  • Support constant expressions as template arguments (needed for <ratio>).
  • Support brace initialization in a constructor's member initialization list.
  • Support OS_LINUX in >parse - linux <files>.
  • Fix bug that removed an #include for a class template without replacing it with a forward declaration.
  • Fix bug when inserting a forward declaration for a class template.
  • Fix bug when determining if a function template instance has already been instantiated.
  • Remove CxxStats, CxxToken.Shrink, and ShrinkCommand.

Documentation

  • Add a "Developing an application" section to the main README.
  • Update RSC Software Overview to reflect changes in this release.
  • Move exe/README to docs directory and delete exe directory.

Known Deficiencies

  • The Linux targets have not yet been tested, and RscLauncher still lacks a Linux target.
  • RscLauncher fails, apparently because of something up-issued by VS2022.
  • Recovery from std::terminate fails in a release build because of a bug in Windows code up-issued by VS2022.

v0.24.0

2 years ago

NodeBase

  • Invoke exit() on RestartReboot.
  • Implement RscLauncher (in new launcher directory) to support RestartReboot (an automated reboot). Closes #12.
  • Add missing call to AbnormalExit in Thread::Start.
  • Remove omit parameter to SysThreadStack::Display.
  • Change ThreadRegistry::Restarting to use a set instead of a list.
  • Add #define NO_FT and use it to tag functions, replacing Debug::noft().

CodeTools

  • Enhance >check to log a file that doesn't end in an endline.
  • Enhance >fix to insert a missing endline at the end of a file.
  • Don't log punctuation spacing on a ( at the end of a line or a } at the end of a file.
  • >fix 142 f $files to append an endline to all files that are missing one.

v0.23.0

2 years ago
  • Fix static initialization order fiasco involving FtLocks_.
  • Remove threads that have exited from FtLocks_.
  • Fix displaying of context switches to account for thread identifiers no longer being contiguous.
  • Fix safety net test scripts broken by recent changes.
  • Reduce run-to-completion timeout to 10 msecs.
  • Implement nw>ipservices command.
  • Packing an enum to 8 bits can lead to a NUL in an ostringstream, with truncation when using str().
  • Reduce use of ostringstream to speed up log generation.

v0.22.0

2 years ago
  • Support disabling/enabling of some IP services. A service is disabled by not creating its I/O thread.
  • When returning from Thread.Start without deleting the thread, perform critical cleanup actions that would otherwise not occur.
  • Don't throw an exception to force a thread to exit if it has already returned from Thread.Start.
  • Log argument warnings even on unused functions.
  • Remove pointer typedefs (TlvParmPtr, TlvParmArray) in TlvParameter.h.
  • Apply >fix to various things found by >check.

v0.21.1

2 years ago
  • Fix bug: TCP messaging causes exceptions.
  • Fix bug: Don't log socket shutdown() errors that result from race conditions.
  • Enhance message display to show header and parameter lengths.
  • Fix bug: nullptr should satisfy an argument that expects a function.
  • Document new code files.
  • Fix some C++ core guidelines warnings.
  • Update copyright notices.

v0.21.0

2 years ago

NodeBase

  • Provide a facility for performing work after a timeout occurs (classes Deferred, DeferredRegistry, and DeferredThread).
  • When a thread exits, retain its ThreadRegistry entry so that its ThreadId can appear in function traces to distinguish it from other threads.
  • Don't generate a log when a thread exits normally.

NetworkBase

  • Use a deferred work item to recreate I/O threads so they aren't furiously recreated when they exit because the network is down.
  • Use a deferred work item to rerun the local address test if it fails.

CodeTools

  • Fix bug: Editor failed to remove the first member initializer because Parser incorrectly set its position.
  • Declare a virtual function that is not an override immediately after special member functions and operators.

v0.20.0

2 years ago

NetworkBase

  • Improve reporting of network logs and alarms (closes #44).
  • Don't generate network logs when the network layer is unavailable.
  • Cancel the network unavailable alarm when a socket sends or receives a message.
  • Implement object pools for IpBuffer payloads (closes #48).
  • Provide a SetClose function to control TCP graceful/hard close.

CodeTools

  • Fix bug: when fixing FunctionCouldBeFree, Editor failed to move the function.
  • Fix bug: to find the best matching function, consider the TypeMatch of all arguments instead of only the worst one.
  • Fix bug: a derived class with an implicit constructor did not record an invocation of its base class default constructor, so the latter was logged as ItemCouldBePrivate.
  • Fix bug: don't log ArgumentCouldBeConst on an rvalue reference argument.

v0.19.0

2 years ago

NetworkBase:

  • Support IPv6 (closes #33).
  • Replace uses of "host" that specifically referred to the local host.
  • Run preemptably when invoking getaddrinfo or getnameinfo.
  • Instead of restarting, raise an alarm if SysSocket::StartLayer fails.
  • Verify the local IP address during startup and raise an alarm if it fails in bind, sendto, or recvfrom.
  • Implement nw>localaddr command to display the local address, with the option to re-verify it.
  • Implement nw>localaddrs command to display all available local addresses.
  • Implement nw>usesipv6 command to display whether IPv6 is enabled.

NodeBase:

  • Rename configuration parameter GetValue functions to CurrValue and provide NextValue functions.
  • Fix bug: configuration parameters that required a restart to be updated were not updated during the restart.
  • Postpone raising SIGCLOSE on threads that will exit during a restart until all threads have been asked if they will exit.
  • Fix bug: system hangs during restart because a thread that planned to exit missed its Proceed().
  • Remove >sizes command.

CodeTools:

  • Fix bug: Editor failed to make an item protected or private, and actually left it erased.
  • Fix bug: CheckDebugFt cleared the database of Debug::ft function names before checking each file, which allowed duplicate function names to be used.
  • Fix bug: have Editor add a new Debug::ft function name to the database of these names so that it won't be reused when editing another function.
  • Fix bug: DataCouldBeFree not logged on a constant that has no references.

v0.18.0

2 years ago
  • If an object pool has no available blocks, expand its size immediately instead of throwing AllocationException.
  • Make the default for the SourcePath configuration parameter (in input/element.config) relative to the startup directory.
  • Fix some compiler warnings and code analysis warnings, and disable others.
  • Provide shared/analysis.ruleset file for Windows builds that enable code analysis.

NOTE: RSC is now on VS2022, so .vcxproj files now use later versions of Windows libraries.