libcds v2.2.0 Release Notes

Release Date: 2017-01-04 // about 7 years ago
    • ๐Ÿ”„ Changed: CMake is used for build libcds. Ancient build.sh has been removed
    • ๐Ÿ”„ Changed: unit and stress tests are migrated to googletest framework
    • โž• Added: IterableList - an implementation of ordered list with thread-safe iterator. MichaelSet/Map and SplitListSet/Map support this type of ordered list and thread-safe iterable too.
    • โž• Added: wait strategies for flat combining technique. Based on research by Marsel Galimullin and Nikolai Rapotkin.
    • ๐Ÿ›  Fixed: SkipList erase() and find() bugs that cause to infinite loop or to program crash in rare case.
    • ๐Ÿ›  Fixed: serious bug in MichaelSet::emplace() function. New node was created twice from the arguments by move semantics. However, move semantics may change internal state of the argument that can lead to an incorrect element and even an incorrect key that breaks the set logic.
    • ๐Ÿ›  Fixed: bug in FeldmanHashSet::erase_at( iterator ): due an error in precondition checking the function may incorrectly return false.
    • ๐Ÿ›  Fixed: possible double-free case in flat combining algorithm. Thanks to Amila Jayasekara who pointed me to this problem
    • Changed: cds::opt::buffer option is divided to initialized (cds::opt::v::initialized_dynamic_buffer, cds::opt::v::initialized_static_buffer) and uninitialized (cds::opt::v::uninitialized_dynamic_buffer,
      cds::opt::v::uninitialized_static_buffer) ones. The old cds::opt::v::dynamic_buffer and cds::opt::v::static_buffer classes are removed.
    • โœ‚ Removed: TsigasCysleQueue (due undecidable ABA-problem)
    • โœ‚ Removed: Michael's allocator cds/memory/michael/allocator.h
    • ๐Ÿ›  Fixed: use-after-free bug in VyukovMPMCCycleQueue internal buffer. To prevent this bug the queue uses an uninitialized buffer now.
    • ๐Ÿ›  Fixed: rare priority inversion bug in MSPriorityQueue
    • Added: for minimizing runtime of stress test the detail level for some test is added. Command line argument --detail-level=N specifies what test should be ran: each test with level not greater than N will be ran. Instead of command line arg the enviromnent variable CDSTEST_DETAIL_LEVEL=N may be used. By default, the detail level is 0 that means only limited set of the test will be ran.