E Holyat wrote:
Then I think I may be running into an allocator_alloc bug during my testing. In a tight for loop, I am creating a thread which creates a child pool from the parent. I am crashing because my child pool is NULL. I am not sure yet, whether the child pool is reusing an index from the parent or creating a new one.

But I can see the following still holds true for allocator_alloc and allocator_free. allocator_alloc allows a free read on max_index when either allocator_alloc / allocator_free can change that value.

If 40 threads from the same parent create child pools. 40 threads can fall into the first "if statement". The access within that "if statement" is mutually exclusive, but, if max_index is being decremented within the "if statement", then the condition that put the 13 or 14th or nth thread into that "if statement" may no longer hold true. Wouldn't that invalidate the index alignment check and give a thread an invalid child pool reference?

The mutex should be moved outside of the if and else if

I'll go have a look at this now to see if we really have a race condition.
Moving the mutex has performance implications, so I want to make sure
we actually need to do that.

Thanks for reporting,

Sander

Reply via email to