| Index: base/lazy_instance.h
|
| ===================================================================
|
| --- base/lazy_instance.h (revision 106713)
|
| +++ base/lazy_instance.h (working copy)
|
| @@ -41,6 +41,7 @@
|
| #include "base/atomicops.h"
|
| #include "base/base_export.h"
|
| #include "base/basictypes.h"
|
| +#include "base/logging.h"
|
| #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
|
| #include "base/threading/thread_restrictions.h"
|
|
|
| @@ -51,6 +52,10 @@
|
| static const bool kAllowedToAccessOnNonjoinableThread = false;
|
|
|
| static Type* New(void* instance) {
|
| + DCHECK_EQ(reinterpret_cast<uintptr_t>(instance) % sizeof(instance), 0u)
|
| + << ": Bad boy, the buffer passed to placement new is not aligned!\n"
|
| + "This may break some stuff like SSE-based optimizations assuming the "
|
| + "<Type> objects are word aligned.";
|
| // Use placement new to initialize our instance in our preallocated space.
|
| // The parenthesis is very important here to force POD type initialization.
|
| return new (instance) Type();
|
| @@ -186,8 +191,8 @@
|
| base::subtle::Release_Store(&me->state_, STATE_EMPTY);
|
| }
|
|
|
| + Type *instance_;
|
| int8 buf_[sizeof(Type)]; // Preallocate the space for the Type instance.
|
| - Type *instance_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(LazyInstance);
|
| };
|
|
|