Merge "[GWP-ASan] [heapprofd] Fix infinite recursion between malloc-racing threads." am: 0d303b42b5

Change-Id: I99b2dcb85dd7798f38319af16eefb7a31ae1bc39
This commit is contained in:
Automerger Merge Worker 2020-02-28 23:39:27 +00:00
commit 8bd2ab6a26

View file

@ -321,10 +321,17 @@ extern "C" void* MallocInitHeapprofdHook(size_t bytes) {
error_log("%s: heapprod: failed to pthread_setname_np", getprogname()); error_log("%s: heapprod: failed to pthread_setname_np", getprogname());
} }
} }
// Get an allocation from libc malloc. If we had a previous dispatch table, // If we had a previous dispatch table, use that to service the allocation,
// this will come from it - otherwise, we'll get it from the system // otherwise fall back to the native allocator.
// allocator. // `gPreviousDefaultDispatchTable` won't change underneath us, as it's
return malloc(bytes); // protected by the `gHeapProfdInitInProgress` lock (which we currently hold).
// The lock was originally taken by our caller in `HandleHeapprofdSignal()`,
// and will be released by `CommonInstallHooks()` via. our `InitHeapprofd()`
// thread that we just created.
if (gPreviousDefaultDispatchTable) {
return gPreviousDefaultDispatchTable->malloc(bytes);
}
return NativeAllocatorDispatch()->malloc(bytes);
} }
bool HeapprofdInitZygoteChildProfiling() { bool HeapprofdInitZygoteChildProfiling() {