Latest release of The Server Framework: 6.6.2
Version 6.6.2 of The Server Framework was released today.
This release is a bug fix and internal feature release which results in lots of change to the OpenSSL, SChannel, Compression and TCP flow control filters. See the release notes here, for full details of all changes.
All clients using earlier versions of both the OpenSSL Option Pack and the SChannel Option Pack are advised to upgrade to this release.
Bug fixes:
- Bug fixes and potential fixes to all code that used function level non-trivial static objects. These have all been replaced with alternative designs as they were not thread safe and could, in very unlikely scenarios, cause problems. See here for more details.
- Bug fix for
JetByteTools::Win32::IQueueTimers::SetTimerWithRefCountedUserData()
. We now wrap theSetTimer()
call in a try/catch block andRelease()
the reference we created withAddRef()
if there’s an exception. - Bug fix to
JetByteTools::IO::CBufferChain::AddDataToBufferChain()
to allow for passing in an empty list of buffers to add. - Bug fix to
JetByteTools::IO::CBufferChain::ConsoliateData()
to ensure that buffers that we attempt to consolidate are writeable. - Bug fix in
JetByteTools::Socket::TConnectionManagerBase::ReleaseSocket()
to ensure exceptions are trapped appropriately. - Bug fix in
JetByteTools::Service::CShutdownHandler::Run()
. Changed the way we respond to shutdown and pause events (if enabled) so that we only respond to each event once rather than repeatedly routing shutdown events to the service whilst the event is set. This was causing non-paged pool exhaustion in some situations when the service failed to shutdown.
Additions:
- Added
JetByteTools::Win32::CRecursiveDirectorySearch
. - Added
JetByteTools::Win32::CRegistryKey::TryDeleteValue()
. - Added
JetByteTools::Win32::TReusableIdManager<t>::TryFree()</t>
. - Added
JetByteTools::Win32::TThreadSafeReusableIdManager<t>::TryFree()</t>
. - Added
JetByteTools::Win32::CRingBuffer::GetSize()
. - Added
JetByteTools::Win32::CActivatableObject
. See here for details. - Added
JetByteTools::Win32::CalculateRequiredPrecision()
which takes a double value and returns the optimum precision required to format the value for display. - Added Intrusive containers. A set, map and multi-map which can be used to replace STL containers with ones which do not need to do memory operations during insertion and removal.
- Added
JetByteTools::IO::IBufferBase::GetSpace()
which returns the available space in a buffer, size - used. - Added
JetByteTools::IO::IBuffer::GetTotalSpace()
which returns all available space in a buffer, this isGetSpace()
plus any space that is currently unused at the front of the buffer due to calls toConsume()
. - Added
JetByteTools::IO::IBuffer::RemoveSpaceAtFront()
which compacts a buffer by removing any unused space at the front and copying any data back towards the front of the buffer. - Added
JetByteTools::IO::CSequencedBufferCollection
which is a collection based onJetByteTools::Win32::TIntrusiveRedBlackTree
which stores the buffers in sequence number order. - Added
JetByteTools::Socket::CFilterDataBase
a base class for filter data that is based onJetByteTools::Win32::
CActivatableObject. - Added
JetByteTools::Socket::CWriteOnlyFilterData
andJetByteTools::Socket::CReadOnlyFilterData
as base classes for filters which only work on one side of the connection. - Added
JetByteTools::Socket::CStreamSocketConnectionFilterBase
a base class for filters which useJetByteTools::Socket::CFilterDataBase
. - Added lots of functionality to
JetByteTools::Socket::CFilteringStreamSocketConnectionManagerBase
to allow for more complete filtering. - Added a Datagram flow control filter,
JetByteTools::Socket::CFlowControlDatagramSocketConnectionFilter
, see here for more details.
Changes:
- Completely redesigned the OpenSSL and SChannel filters so that they use the new
JetByteTools::Socket::CFilterDataBase
filter data base classes. - Changed all versions of
JetByteTools::Win32::ToString()
which take a double or long double to also accept a precision value. This value defaults to 6, which is the default precision used if precision isn’t specified. - Changed
JetByteTools::Win32::CreateDirectoryIfRequired()
to return a bool which indicates if the directory was created. - Changed
JetByteTools::Win32::CreateDirectoriesIfRequired()
to return a count of the number of directories created. - Changed
JetByteTools::Win32::CThreadPool::OnThreadPoolThreadStopped()
so that it callsJetByteTools::Win32::IMonitorThreadPool::OnThreadPoolThreadStopped()
before deleting the thread and decrementing the counter. This makes it possible to clean up the monitor when the final thread is deleted (and the wait on the counter returns). - Changed
JetByteTools::Win32::TLockableObject
so that it only uses a SRWL if we’re building for Windows 7 or later. This is so that theTryEnter()
API is available for the SRWL. - We now use
JetByteTools::Win32::CombinePath()
where possible rather than combining paths by hand. - Changed
JetbyteTools::Win32::CCallbackTimerQueue
andJetbyteTools::Win32::CCallbackTimerWheel
to use the new intrusive containers. - Changed
JetByteTools::IO::IBuffer::MakeSpaceAtFront()
so that it takes an optional value which indicates how much space must be available at the rear of the buffer. This allows us to be able to create space at the front only if there’s enough space in the buffer for the space we need at the front and rear of the buffer. - Changed
JetByteTools::IO::CBufferChainStoresNulls
so that you can pass it an instance ofJetByteTools::IO::IAllocateBuffer
in its constructor and it can then use that to allocate a new buffer if the number of ’null buffers’ stored becomes too great. This effectively removes the limit on the number of ’null buffers’ that can be stored between non-null buffers. - Changed
JetByteTools::IO::CSortedBufferChain
so that it caches whether you can get the next buffer or not. This reduces the work that needs to be done to find out if you can get the next buffer. - Changed the implementation of
JetByteTools::Socket::CCompressingStreamSocketConnectionFilter
so that it uses the new filter base classes. - Changed the implementation of
JetByteTools::Socket::CFlowControlStreamSocketConnectionFilter
so that it uses the new filter base classes.