Skip to content

Releases: jfriesne/muscle

9.37 Release

03 May 01:27
Compare
Choose a tag to compare

9.37 - Released 5/2/2024

  • Implemented the ustar extension in TarFileWriter to support file paths
    and linked-file paths up to 256 characters in length.
  • Implemented the pax extension in TarFileWriter to support file paths
    and linked-file paths of unlimited length.
  • Added CPut*() convenience methods to the Python Message class.
  • Updated the snoopsharedmem to use more sophisticated argument parsing.
  • Updated the snoopsharedmem to have "delay=N" and "clear" options.
  • Added a GetThreadPriorityName() convenience-method to the Thread class.
  • Added a MUSCLE_AVOID_THREAD_PRIORITIES flag that can be added to the
    compile-line to turn all set-thread-priority calls into no-ops.
  • Added SetThreadScheduler()/GetThreadScheduler()/GetThreadSchedulerName()
    methods to the Thread class to support Linux's SCHED_FIFO, etc.
  • Updated the Python2 and Python3 message.py classes so that GetFieldItem()
    and the Get*() methods now take an optional (defaultValue) argument that
    specifies what should be returned if the requested item is not present
    in the Message.
  • Removed the option for MUSCLE_NODISCARD macro to expand to
    __attribute__((warn_unused_result)) under pre-C++17 codebases,
    as that implementation warns even when an explicit (void) cast
    is employed, causing too much visual noise to be useful.
  • Replaced calls to newnothrow with calls to new, to simplify the
    code given fact that in modern OS's newnothrow's successful return
    doesn't actually mean the RAM is available anyway.
  • Added RoundUp() versions of all the TimeUnitConversion functions
    (e.g. added MicrosToMillisRoundUp() to complement MicrosToMillis())
  • Modified the MUSCLE_USE_POLL and MUSCLE_USE_EPOLL implementations of
    SocketMultiplexer to round up to the nearest millisecond when computing
    timeout-times (instead of rounding down, since slightly-early-wakeups
    are worse than slightly-late-wakeups)

9.36 Release

06 Mar 15:45
Compare
Choose a tag to compare

9.36 - Released 3/6/2024

  • Added GetMostRecentInputTimeStamp() and GetMostRecentOutputTimeStamp()
    methods to the AbstractReflectSession class
  • Added a GetMostRecentAcceptTimeStamp() method to the
    ReflectSessionFactory class.
  • Added a GetAcceptCount() method to the ReflectSessionFactory class.
  • PrintSessionsInfo() now includes text describing how recently
    each session has sent or received data.
  • PrintFactoriesInfo() now includes text describing how recently
    each factory has accepted an incoming TCP connection, and how
    many connections the factory has received so far.
  • Added a GetClientDescriptionString() virtual method to the
    AbstractReflectSession class to support more-useful debug output.
  • Added a GetSocketBindAddress() function to NetworkUtilityFunctions.h
    for querying where a socket is bound to on the local machine.
  • Renamed GetPeerIPAddress() to GetPeerAddress(), and changed it
    to return an IPAddressAndPort instead of returning an IPAddress
    and also using a separate (optPort) argument.
  • Tweaked zlib/zlib/zconf.h so that the gzlib files can build
    successfully even if ./configure wasn't called in the
    zlib/zlib folder first.
  • SocketMultiplexer::RegisterSocket() now emits an error message
    to the log if a file descriptor is too large to pass to FD_SET().
  • Updated build instructions to specify cmake instead of
    Visual Studio

9.35 Release

15 Feb 05:25
Compare
Choose a tag to compare

9.35 - Released 2/14/2024

  • Added an optional (optRunAsUser) argument to the various
    process launch methods in ChildProcessDataIO.
  • Added convenience constructors to the IPAddress class
    that take an in_addr or in6_addr as an argument.
  • Added convenience constructors to the IPAddressAndPort class
    that take a sockaddr_in or sockaddr_in6 as an argument.
  • Added WriteToInAddr() and WriteToIn6Addr() convenience
    methods to the IPAddress class.
  • Added WriteToSockAddrIn() and WriteToSockAddrIn6()
    convenience methods to the IPAddressAndPort class.
  • Added convenience overloads of the SendDataUDP() and
    ReceiveDataUDP() functions that take an IPAddressAndPort
    as their source/destination argument.
  • Added method IPAddress::IsIPv6LinkLocal().
  • Changed ChildProcessDataIO::ChildProcessReadyToRun() to
    be protected instead of public.
  • Removed ip_address typedef; use IPAddress instead.
  • Tweaked Inet_NtoA() so that when called with the (preferIPv4)
    flag, it will return the invalid/all-zeroes IP address string
    as "" rather than "::".
  • Updated TarFileWriter to handle it a little more elegantly
    when a file's length changes while the tar data is being written
    out to a non-seekable DataIO.
  • Fixed a bug in the Ref class that would cause a NULL Ref's
    status-string to be returned as "OK" rather than "NULL Ref"
  • BitChord::SetByte()'s second argument was the wrong type. Fixed.

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.