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 the SetTimer() call in a try/catch block and Release() the reference we created with AddRef() 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 is GetSpace() plus any space that is currently unused at the front of the buffer due to calls to Consume().
  • 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 on JetByteTools::Win32::TIntrusiveRedBlackTree which stores the buffers in sequence number order.
  • Added JetByteTools::Socket::CFilterDataBase a base class for filter data that is based on JetByteTools::Win32::CActivatableObject.
  • Added JetByteTools::Socket::CWriteOnlyFilterData and JetByteTools::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 use JetByteTools::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 calls JetByteTools::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 the TryEnter() API is available for the SRWL.
  • We now use JetByteTools::Win32::CombinePath() where possible rather than combining paths by hand.
  • Changed JetbyteTools::Win32::CCallbackTimerQueue and JetbyteTools::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 of JetByteTools::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.