Releases: jfriesne/muscle
Releases · jfriesne/muscle
9.37 Release
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
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
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
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
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
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
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
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
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
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.