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::CSequencedBufferCollectionwhich is a collection based onJetByteTools::Win32::TIntrusiveRedBlackTreewhich stores the buffers in sequence number order. - Added
JetByteTools::Socket::CFilterDataBasea base class for filter data that is based onJetByteTools::Win32::CActivatableObject. - Added
JetByteTools::Socket::CWriteOnlyFilterDataandJetByteTools::Socket::CReadOnlyFilterDataas base classes for filters which only work on one side of the connection. - Added
JetByteTools::Socket::CStreamSocketConnectionFilterBasea base class for filters which useJetByteTools::Socket::CFilterDataBase. - Added lots of functionality to
JetByteTools::Socket::CFilteringStreamSocketConnectionManagerBaseto 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::CFilterDataBasefilter 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::TLockableObjectso 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::CCallbackTimerQueueandJetbyteTools::Win32::CCallbackTimerWheelto 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::CBufferChainStoresNullsso that you can pass it an instance ofJetByteTools::IO::IAllocateBufferin 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::CSortedBufferChainso 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::CCompressingStreamSocketConnectionFilterso that it uses the new filter base classes. - Changed the implementation of
JetByteTools::Socket::CFlowControlStreamSocketConnectionFilterso that it uses the new filter base classes.