We are using version 3.0.3. We ran into some strange issues with it. We kept running into exception "No free or removed slots available. Key set full?!!" in one of our applications. In one case, we were able to break into the place when the exception occurred. The image I uploaded shows the internal state when the exception is thrown. The second image shows the stack trace.
I have the following questions. 1) We created the hash set using default constructor. It should have the capacity of 23. Why did it become 3? 2) The set shows that all three slots were occupied while the load factor is 0.5. How come the resizing didn't get triggered? 3) Again the three slots were occupied but the _size=1 and _free=2. Why?
For sure, this will throw the exception as mentioned in the subject line. I traced through the code. It does probe all the spaces and found all of them have state=1.
Also this hash set is contained in a thread local object. That should eliminate the possible corruption caused by concurrent access.
Please help look into the issue. If you need any additional information, please let me know and I'll try to gather it for you.