allocator: Fix __THROW and mallinfo for Musl

This commit is contained in:
klzgrad 2022-11-09 23:36:59 +08:00
parent 6e5b245e64
commit d1cef3d803
4 changed files with 15 additions and 3 deletions

View File

@ -238,7 +238,12 @@ void PartitionAllocMallocInitOnce() {
if (!g_global_init_called.compare_exchange_strong(expected, true)) if (!g_global_init_called.compare_exchange_strong(expected, true))
return; return;
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #if defined(__MUSL__)
// Musl calls malloc() in pthread_atfork(), resulting in a deadlock.
static_cast<void>(BeforeForkInParent);
static_cast<void>(AfterForkInParent);
static_cast<void>(AfterForkInChild);
#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
// When fork() is called, only the current thread continues to execute in the // When fork() is called, only the current thread continues to execute in the
// child process. If the lock is held, but *not* by this thread when fork() is // child process. If the lock is held, but *not* by this thread when fork() is
// called, we have a deadlock. // called, we have a deadlock.

View File

@ -758,7 +758,7 @@ SHIM_ALWAYS_EXPORT int mallopt(int cmd, int value) __THROW {
#endif // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID) #endif // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_LINUX) && !defined(__MUSL__) || BUILDFLAG(IS_CHROMEOS)
SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW { SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
partition_alloc::SimplePartitionStatsDumper allocator_dumper; partition_alloc::SimplePartitionStatsDumper allocator_dumper;
Allocator()->DumpStats("malloc", true, &allocator_dumper); Allocator()->DumpStats("malloc", true, &allocator_dumper);

View File

@ -9,7 +9,8 @@
#if defined(__GNUC__) #if defined(__GNUC__)
#if BUILDFLAG(IS_POSIX) // Musl does not provide sys/cdefs.h
#if BUILDFLAG(IS_POSIX) && !defined(__MUSL__)
#include <sys/cdefs.h> // for __THROW #include <sys/cdefs.h> // for __THROW
#endif #endif

View File

@ -22,6 +22,12 @@
#include "base/allocator/partition_allocator/shim/allocator_shim_internals.h" #include "base/allocator/partition_allocator/shim/allocator_shim_internals.h"
// Musl does not specify anything for malloc() etc.
#if defined(__MUSL__)
#undef __THROW
#define __THROW
#endif
extern "C" { extern "C" {
// WARNING: Whenever a new function is added there (which, surprisingly enough, // WARNING: Whenever a new function is added there (which, surprisingly enough,