diff --git a/base/allocator/allocator.gyp b/base/allocator/allocator.gyp index 74e0a433176005..b744a3a472fb69 100644 --- a/base/allocator/allocator.gyp +++ b/base/allocator/allocator.gyp @@ -313,8 +313,7 @@ 'disable_debugallocation%': 0, }, 'conditions': [ - # TODO(phajdan.jr): Also enable on Windows. - ['disable_debugallocation==0 and OS!="win"', { + ['disable_debugallocation==0', { 'defines': [ # Use debugallocation for Debug builds to catch problems early # and cleanly, http://crbug.com/30715 . diff --git a/third_party/tcmalloc/chromium/src/config_win.h b/third_party/tcmalloc/chromium/src/config_win.h index db4c51886c0366..e6506e44591421 100644 --- a/third_party/tcmalloc/chromium/src/config_win.h +++ b/third_party/tcmalloc/chromium/src/config_win.h @@ -74,7 +74,7 @@ #undef HAVE_EXECINFO_H /* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H +#define HAVE_FCNTL_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_FEATURES_H diff --git a/third_party/tcmalloc/chromium/src/debugallocation.cc b/third_party/tcmalloc/chromium/src/debugallocation.cc index cccaf982b31154..7b09e412ec36b2 100644 --- a/third_party/tcmalloc/chromium/src/debugallocation.cc +++ b/third_party/tcmalloc/chromium/src/debugallocation.cc @@ -127,19 +127,16 @@ DEFINE_bool(symbolize_stacktrace, EnvToBool("TCMALLOC_SYMBOLIZE_STACKTRACE", true), "Symbolize the stack trace when provided (on some error exits)"); -// If we are LD_PRELOAD-ed against a non-pthreads app, then -// pthread_once won't be defined. We declare it here, for that -// case (with weak linkage) which will cause the non-definition to -// resolve to NULL. We can then check for NULL or not in Instance. -extern "C" int pthread_once(pthread_once_t *, void (*)(void)) - ATTRIBUTE_WEAK; - // ========================================================================= // // A safe version of printf() that does not do any allocation and // uses very little stack space. static void TracePrintf(int fd, const char *fmt, ...) +#ifdef __GNUC__ __attribute__ ((__format__ (__printf__, 2, 3))); +#else + ; +#endif // The do_* functions are defined in tcmalloc/tcmalloc.cc, // which is included before this file @@ -624,9 +621,7 @@ class MallocBlock { } static void CheckForDanglingWrites(const MallocBlockQueueEntry& queue_entry) { - // Initialize the buffer if necessary. - if (pthread_once) - pthread_once(&deleted_buffer_initialized_, &InitDeletedBuffer); + perftools_pthread_once(&deleted_buffer_initialized_, &InitDeletedBuffer); if (!deleted_buffer_initialized_no_pthreads_) { // This will be the case on systems that don't link in pthreads, // including on FreeBSD where pthread_once has a non-zero address diff --git a/third_party/tcmalloc/chromium/src/windows/port.h b/third_party/tcmalloc/chromium/src/windows/port.h index e9a020656b36fd..c23810918592b7 100644 --- a/third_party/tcmalloc/chromium/src/windows/port.h +++ b/third_party/tcmalloc/chromium/src/windows/port.h @@ -49,6 +49,9 @@ #ifdef _WIN32 +#ifndef NOMINMAX +#define NOMINMAX /* Do not define min and max macros. */ +#endif #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN /* We always want minimal includes */ #endif