| Index: third_party/tcmalloc/chromium/src/maybe_threads.cc
|
| diff --git a/third_party/tcmalloc/chromium/src/maybe_threads.cc b/third_party/tcmalloc/chromium/src/maybe_threads.cc
|
| index 15c8a23dcb3509549ef6b45531f2418e988a3cf5..37646d6a50f40042ae70f591f14487246989f024 100644
|
| --- a/third_party/tcmalloc/chromium/src/maybe_threads.cc
|
| +++ b/third_party/tcmalloc/chromium/src/maybe_threads.cc
|
| @@ -124,7 +124,17 @@ int perftools_pthread_once(pthread_once_t *ctl,
|
| if (pthread_once) {
|
| return pthread_once(ctl, init_routine);
|
| } else {
|
| +#if defined(__ANDROID__)
|
| + // Android's pthread_once_t is typedef volatile and memcmp only takes
|
| + // const void*, cast the volatile away.
|
| + if (memcmp(const_cast<const void*>(reinterpret_cast<const volatile void*>(
|
| + ctl)),
|
| + const_cast<const void*>(reinterpret_cast<const volatile void*>(
|
| + &pthread_once_init)),
|
| + sizeof(*ctl)) == 0) {
|
| +#else
|
| if (memcmp(ctl, &pthread_once_init, sizeof(*ctl)) == 0) {
|
| +#endif
|
| init_routine();
|
| ++*(char*)(ctl); // make it so it's no longer equal to init
|
| }
|
|
|