huge realloc problem with multiple threads

Jason Evans jasone at canonware.com
Wed Nov 9 12:03:25 PST 2011


On 11/09/2011 05:05 AM, Rich Prohaska wrote:
> the huge realloc protocol is:
>
>    1. allocate address space with mmap.
>    2. add the new space to the huge extent tree.
>    3. remap the old pages to the new address space with mremap.  this
>       avoid a copy.
>    4. remove the old address space from the huge extent tree.
>
> the problem occurs when the old address space becomes free during step
> 3.  another thread executing this protocol can get this address during
> the mmap in step 1.  then we have a race between the first thread
> removing the space in step 4 and the second thread adding the space in
> step 2.
>
> i switched the order of steps 3 and 4 to solve the problem in the
> huge_ralloc function.  i moved the huge_dalloc call to before the mremap
> call.

I just committed a fix that is as you describe.  Thanks for the detailed 
report, test, and suggested fix!  In a strange coincidence, a coworker 
started seeing this same failure yesterday, so you saved me some serious 
head scratching.

Jason



More information about the jemalloc-discuss mailing list