Index: third_party/tcmalloc/chromium/src/base/googleinit.h |
diff --git a/third_party/tcmalloc/chromium/src/base/googleinit.h b/third_party/tcmalloc/chromium/src/base/googleinit.h |
index 62ad84c60251665e5e8fae2139d0714457bc838f..4746a428126d8206eec4d8a46f857ee051a710ed 100644 |
--- a/third_party/tcmalloc/chromium/src/base/googleinit.h |
+++ b/third_party/tcmalloc/chromium/src/base/googleinit.h |
@@ -33,19 +33,39 @@ |
#ifndef _GOOGLEINIT_H |
#define _GOOGLEINIT_H |
+#include "base/logging.h" |
+ |
class GoogleInitializer { |
public: |
- typedef void (*void_function)(void); |
- GoogleInitializer(const char* name, void_function f) { |
- f(); |
+ typedef void (*VoidFunction)(void); |
+ GoogleInitializer(const char* name, VoidFunction ctor, VoidFunction dtor) |
+ : name_(name), destructor_(dtor) { |
+ if (ctor) |
+ ctor(); |
+ } |
+ ~GoogleInitializer() { |
+ if (destructor_) |
+ destructor_(); |
} |
+ |
+ private: |
+ const char* const name_; |
+ const VoidFunction destructor_; |
}; |
#define REGISTER_MODULE_INITIALIZER(name, body) \ |
namespace { \ |
static void google_init_module_##name () { body; } \ |
GoogleInitializer google_initializer_module_##name(#name, \ |
- google_init_module_##name); \ |
+ google_init_module_##name, NULL); \ |
} |
+#define REGISTER_MODULE_DESTRUCTOR(name, body) \ |
+ namespace { \ |
+ static void google_destruct_module_##name () { body; } \ |
+ GoogleInitializer google_destructor_module_##name(#name, \ |
+ NULL, google_destruct_module_##name); \ |
+ } |
+ |
+ |
#endif /* _GOOGLEINIT_H */ |