Releases: jfriesne/muscle
Releases · jfriesne/muscle
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.
9.23 release
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
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
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.