Skip to content

Releases: jfriesne/muscle

v9.34

18 Dec 16:20
Compare
Choose a tag to compare

9.34 - Released 12/18/2023

  • Added an optional localnicip=local.nic.ip.address argument
    to hexterm, to better support sending IPv4 multicast packets.
  • Added a B_SHUTTING_DOWN error code, useful for returning
    from Thread::MessageReceivedFromOwner() overrides if there
    isn't any real error but the internal thread is exiting on
    request.
  • Added a templated GetConstRefToDefaultObjectForType()
    convenience function to util/RefCount.h
  • Added a GetHardLinkCount() method to the FilePathInfo class.
  • Modified IsRegexToken() to return false for '-', since
    hyphens aren't meaningful except in the context of
    "character class" regex tokens (which will get escaped anyway).
  • Replaced the IsHosed() and SetHosed() methods of the
    AbstractMessageIOGateway class with more descriptive methods
    GetUnrecoverableErrorStatus() and SetUnrecoverableErrorStatus().

9.33 Release

30 Oct 23:27
Compare
Choose a tag to compare

9.33 - Released 10/30/2023

  • Added FromHexString() and FromBinaryString() methods to the
    BitChord class, to complement the ToHexString()
    and ToBinaryString() methods.
  • Added a Queue::IsIndexValid(uint32) convenience-method.
  • Updated the Queue::Remove*() methods to use std::move()
    when possible.
  • Updated the Hashtable::Remove*() methods to use std::move()
    when possible.
  • Added IsAtStart() and IsAtEnd() convenience-methods to the
    HashtableIterator class.
  • The snoopsharedmem tool now support an optional (maxBytesToPrint)
    argument, in case you only want to see the header of the region.
  • Removed obsolete references to TARGET_PLATFORM_XENOMAI.
  • Updated the captive zlib library to the current GitHub version,
    to avoid "function declaration without a prototype is deprecated"
    compiler warnings.
  • Fixed the LogTime() and LogPlain() macros so that they compile
    when called from a different namespace.
  • Changed ImmutableHashtablePool::GetWithAux() to repurpose an
    existing table (if possible) while adding an item, as well
    as when removing one.

9.32 release

08 Sep 19:49
Compare
Choose a tag to compare

9.32 - Released 9/8/2023

  • Added a -DWITH_HELGRIND option to CMakeLists.txt to enable
    causality annotations in the reference-counting of RefCount.h
    so that helgrind doesn't give false-positive warnings when
    analyzing an execution of this code for race conditions.
  • Added MUSCLE_CONSTEXPR tag to trivial constructors and methods
    of various POD-like utility classes.
  • Added MUSCLE_CONSTEXPR_17 macro, for places where a constexpr
    tag is useful but only allowed in C++17 or later.
  • Updated PythonUtilityFunctions.h to use a forward-declaration
    instead of #include-ing Python.h directly, to avoid potential
    namespace-collisions between Python and Qt.
  • Applied fixes for various minor issues flagged by pvs-studio-analyzer.
  • Changed SignalMultiplexer's received-signal-counters to be
    AtomicCounters rather than uint32 to avoid helgrind complaints
    when a signal is handled.
  • The ObjectPool constructor now calls GetDefaultObjectForType()
    on its object-type and the associated Ref-types, to ensure that
    the static singleton is initialized while the process is still
    in a single-threaded state.
  • IsMessageDeflated() now takes a ConstMessageRef rather than MessageRef.
  • Fixed a pointer-type-mismatch issue that could cause unnecessary
    compile-time errors in the templated version of Hashtable::Remove()

9.31 release

14 Jun 23:10
Compare
Choose a tag to compare

9.31 - Released 6/14/2023

  • Added an IsFileOpen() method to the GZDataIO class.
  • Modified the Hashtable class so that HashtableIterators
    are only registered in the iterators-list if they are actually
    pointing at a valid HashtableEntry.
  • ParseConnectArg() and IPAddressAndPort::SetFromString() now support
    an alternate port-syntax that doesn't require brackets, to get around
    osascript's command-parsing limitations. E.g. you can now specify
    "::1_port_1234" instead of "[::1]:1234"
  • Added convenience PODHashFunctor specializations (for QSize,
    QPoint, and QRect) to QMuscleSupport.h
  • Increased the Snooze64() time in testatomicvalue's writer thread
    to 10mS as it appears that 1mS snoozes were being rounded down to zero.
  • Added MUSCLE_NODISCARD tag to the String and IPAddressAndPort classes.
  • Increased the default value of AtomicValue's ATOMIC_BUFFER_SIZE
    template argument to 8.
  • Fixed code that was passing NULL as an argument to %s in printf() or
    LogTime(). Thanks to Ruurd Adema for pointing out that doing that is
    undefined behavior.
  • Changed Hashtable::_iteratorThreadID to be a std::atomic<> to
    avoid potential undefined behavior in multithreaded scenarios.
  • Fixed AtomicValue class to use bitmasks instead of modulo and
    only support powers-of-two array sizes.
  • Fixed the handling of InterlockedCompareExchange()'s return value
    in the AtomicValue class.

9.30 release

28 Apr 20:45
Compare
Choose a tag to compare

9.30 - Released 4/28/2023

  • Tagged the constructor of the MutexGuard class (and friends) as
    MUSCLE_NODISCARD so the compiler will warm about anonymous guards.
  • Tagged ObjectPool::ObtainObject() with MUSCLE_NODISCARD.
  • Added MUSCLE_NODISCARD to all the functions and methods that it
    wouldn't make sense to call without examining their return value.
  • Added MUSCLE_NODISCARD to various concrete classes (String,
    Queue, Hashtable, IPAddress, etc) that shouldn't be ignored when
    used as return values.
  • Renamed String::Append() to String::WithAppend().
  • Renamed String::Prepend() to String::WithPrepend().
  • Renamed String::AppendWord() to String::WithAppendedWord().
  • Renamed String::PrependWord() to String::WithPrependedWord().
  • Renamed String::Trim() to String::Trimmed().
  • Renamed String::Pad() to String::PaddedBy().
  • Renamed String::Indent() to String::IndentedBy().
  • Removed DEFAULT_MUSCLE_ROUTING_FLAGS_BIT_CHORD, and rewrote
    the routing flags to use the BitChord class.
  • Rewrote testnagle.cpp to include a unit-test for automated testing.
  • Updated function declarations in regex captive library to avoid
    compiler warnings.
  • Updated the unit tests so none of them takes more than 5 seconds
    to complete when done as part of a CMake "make test" pass.
  • Fixed logic error in testgateway.cpp.
  • MUSCLE_NODISCARD is now defined as a no-op when compiling C code,
    to avoid breaking the build under C compilers that say they support
    C23 but nevertheless don't grok [[nodiscard]] yet.

9.25 release

07 Apr 18:55
Compare
Choose a tag to compare

9.25 - Release 4/7/2023

  • Rewrote String::WithReplacements(const Hashtable<String,String> &)
    to only scan the input string once, instead of once per key.
  • Added a String::Replace(const Hashtable<String,String> &) method.
  • Added a ReplaceAllItems() convenience-method to the Queue class.
  • Added MUSCLE_NO_DISCARD keyword, and applied it to the Ref and
    ConstRef classes and to the status_t and io_status_t types, so that
    calls ignoring these return values will generate compile-time warnings.
  • Added a TruncateToLength() convenience method to the ByteBuffer class.
  • Added a PR_NAME_KEEPALIVE_INTERVAL_SECONDS parameter so clients can
    tell muscled to send a PR_RESULT_NOOP every (so many) seconds to
    verify TCP connectivity on an otherwise idle connection.
  • Removed DataIO::GetReadByteTimeStamp() as it wasn't being used.
  • CloseSocket() now prints an error message if its call to close() fails.
  • GetProcessMemoryUsage() now returns more accurate values.
  • Fixed a number of broken hyperlinks in the MUSCLE-by-example mkdocs.

9.24 release

20 Mar 15:52
Compare
Choose a tag to compare

9.24 - Release 3/20/2023

  • Added a CMakePresets.json file for quick specification of minimal
    (i.e. library-only) or full (i.e. including unit-tests) builds.
  • Added a CMAKEOPTIONS.txt file to describe the options available
    for building MUSCLE via cmake.
  • Moved the non-unit-test executables out of the "test" folder
    and into their own new/separate "tools" folder.
  • Renamed BUILDOPTIONS.txt to COMPILEROPTIONS.txt
  • Modified AbstractReflectSession::Reconnect() to not fail
    if CreateDefaultSocket() return a NULL reference.
  • The Python3 implementation of message.py wasn't encoding
    non-ASCII utf8 strings correctly when flattening a Message. Fixed.
  • ZLibCodec::Inflate() would fail when inflating a compressed
    zero-byte buffer. Fixed.

9.23 release

25 Feb 00:33
Compare
Choose a tag to compare

9.23 - Release 2/24/2023

  • Added a -DWITH_THREAD_SANITIZER=ON option to the CMakeLists.txt.
  • Added a -DMUSCLE_NUM_RESERVED_HIGH_BITS_IN_POINTERS flag to specify
    how many of the most-significant-bits of a pointer are reserved for
    system use. This value defaults to 16 for 64-bit Android systems
    (to account for Android's MTE feature) and to 0 on everything else.
  • Added a _registeredSubscribersMutex to the ICallbackMechanism class
    so that it can handle unusual dispatching cases more gracefully.
  • Added a runtests.sh script to tests folder. This script can be
    run to quickly execute all tests and report any detected regressions.
  • Added add_test() directives to test/CMakeLists.txt to enable CTest.
  • Renamed -DMUSCLE_AVOID_BITSTUFFING to -DMUSCLE_AVOID_TAGGED_POINTERS
    since the latter is a more commonly-used term.
  • Changed the default setting of the WITH_TESTS option to OFF
    in CMakeLists.txt
  • GetNetworkInterfaceinfos() is now implemented for Android
    (API level 24 or later).
  • SharedMemory.cpp now compiles under Android (pre API level 26)
    although its methods will return B_UNIMPLEMENTED if called.
  • GetNetworkInterfaceInfos() now returns B_UNIMPLEMENTED when
    called from an OS that it doesn't have an implementation for.
  • Applied some Android build fixes as suggested by Ruurd Adema.
  • SetFileLogLevel() was broken. Fixed.
  • Avoid including sem.h when MUSCLE_FAKE_SHARED_MEMORY is defined.

9.22 release

02 Feb 21:50
Compare
Choose a tag to compare

9.22 - Released 2/2/2023

  • Modified Queue::InternalizeIndex() to use subtraction
    instead of modulo, for a 3x efficiency gain.
  • Added a MUSCLE_NOEXCEPT keyword that expands to noexcept
    under C++11 or later, or to nothing under C++03
  • Added MUSCLE_NOEXCEPT tags to the SwapContents() methods
    and move-constructors/operators that can make that guarantee.
  • Added a MatchesNodeNameQueryFilter class, to support query
    filtering against DataNode-names.
  • Added DataNode::SetNodeName()
  • Added a WITH_IPV6=OFF option to the CMakeLists.txt for
    easier building of MUSCLE in IPv4-only mode.
  • Added a "shareport" argument to hexterm to enable UDP port-sharing.
  • Added an IsBroadcast() method to the IPAddress class.
  • Added GetStatus() and SetStatus() methods to the
    Ref/ConstRef/DummyRef/DummyConstRef classes, so that when they
    are returned in a NULL state they can tell you why they aren't set.
  • Added BooleansToBitChord() convenience-functions to PointerAndBits.h
  • Updated PointerAndBits to be able to use the high bit in a
    pointer as well as the low bit(s).
  • Updated the captive zlib library to v1.2.13.
  • Replaced the PointerAndBool.h header (and class) with a new
    PointerAndBits.h header (and class) that does the same thing,
    but in a simpler, more generalized fashion.
  • Fixed broken UDP support in hexterm when -DMUSCLE_AVOID_IPV6
    was set as a compiler-flag.
  • Renamed SOCKET_FAMILY_IPV6 to SOCKET_FAMILY_IPV6_IS_DISABLED
    when -DMUSCLE_AVOID_IPV6 is set, to avoid potential runtime bugs.

9.21 release

13 Jan 19:52
Compare
Choose a tag to compare

9.21 - Released 1/13/2023

  • Added @tparam Doxygen tags for any template-arguments that
    the calling code might need to specify explicitly.
  • Enabled tagfile generation in muscle.dox.
  • Added a DataIO::ReadFullyUpTo() convenience-method to handle
    reading (up to n) bytes or (until EOF), whichever comes first.
  • Added error code B_END_OF_STREAM to allow Read()-type methods
    to unambiguously specify that the reason they are returning an
    error is because they have reached EOF/EOS.
  • Changed DataIO::ReadFully() and DataIO::WriteFully() to
    return status_t instead of uint32.
  • Removed the C APIs from the Doxygen output.
  • Auto-updated the muscle.dox file to the latest Doxygen version.
  • Fixed several issues to make Doxygen's output more useful.
  • Fixed some compiler warnings in the captive regex library.
  • Fixed the namespacing of the DoxyTemplates header so that
    Doxygen generation works with the newest Doxygen version.
  • Updated a number of out-of-date Doxygen comments.