cleanTomb used compareAndSet to update a reference, but incorrectly re-fetched the 'original' instead of using the version that was used to make the copy. The result was that in case of a conflict, the changes of one thread would be overwritten by another thread.
If cleanTomb failes when called from the remove method, the node is already replaced by a TNode, and the subsequent call will
re-try to clean the TNode. The node removed by cleanTomb may already have been replaced with a live node by another thread, so
cleanTomb checks if the removed node actually was the intended node before committing the results.
[x] My code follows the style guidelines of this project
[x] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have made corresponding change to the default configuration files (and/or docker env variables)
[ ] I have added tests that prove my fix is effective or that my feature works
[x] I have updated the Changelog if it's a feature or a fix that has to be reported
cleanTomb used compareAndSet to update a reference, but incorrectly re-fetched the 'original' instead of using the version that was used to make the copy. The result was that in case of a conflict, the changes of one thread would be overwritten by another thread.
If cleanTomb failes when called from the remove method, the node is already replaced by a TNode, and the subsequent call will re-try to clean the TNode. The node removed by cleanTomb may already have been replaced with a live node by another thread, so cleanTomb checks if the removed node actually was the intended node before committing the results.
[x] My code follows the style guidelines of this project
[x] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have made corresponding change to the default configuration files (and/or docker env variables)
[ ] I have added tests that prove my fix is effective or that my feature works
[x] I have updated the Changelog if it's a feature or a fix that has to be reported
bug
Closes #841