Release Notes 2024-04-16:

  • If multiple occurences of a library are found during manifest generation (e.g. same package installed in multiple project directories), ManifestGen lists them in the error message.

  • The generic stream operator>> for JSONValue was not correctly implementing input of arbitrary JSON from string based streams, this has been fixed by adding a specific operator overload for std::basic_stringstream. Another issue was fixed which was preventing compilation of JSONValue stream operators with gcc12 and newer (and clang).

  • OpenSSL integration has been updated, removing calls to deprecated functions when using OpenSSL v3.

  • In analogy to writeJSON(), a writeXML() method has been added to Channel, ChannelBuffer etc., allowing to directly post data encoded in XML, e.g. within an XML configuration file.

  • Authority::unsubscribe() does not require the channel type anymore. For compatibility, the template method unsubscribe<Type>() remains valid, but the type is ignored. In particular, a wrong type (different from subscription) does not cause a crash from a null pointer dereference anymore.

  • In DispatcherThread, several issues have been fixed related to stop() interrupting scheduled functions, which could lead to incomplete initialization or timers not starting again on next start(). MicroUnits already enter 'Bootup' state before they are checked in (instead of when they start to initialize), allowing to reliably query if their bootup has finished and their initialization is complete.

    • Note: it is possible now that a MicroUnit's initialize() function is called repeatedly if the MicroUnit (Authority) is stopped during execution of initialize(). Although stopping+restarting during
      initialization can and should be avoided in normal operation, implementation of initialize() may need to be aware of this. E.g. subscribing a channel callback again will lead to the callback function being called twice for each channel update!

  • In the AuthorityManager, locking against concurrent access has been improved to avoid deadlocks from recursive calls such as when an Authority's start() or stop() implementation creates/destroys another Authority.


Additional information