Index: third_party/libphonenumber/cpp/src/base/threading/thread_restrictions.cc |
=================================================================== |
--- third_party/libphonenumber/cpp/src/base/threading/thread_restrictions.cc (revision 0) |
+++ third_party/libphonenumber/cpp/src/base/threading/thread_restrictions.cc (revision 0) |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/threading/thread_restrictions.h" |
+ |
+// This entire file is compiled out in Release mode. |
+#ifndef NDEBUG |
+ |
+#include "base/lazy_instance.h" |
+#include "base/logging.h" |
+#include "base/threading/thread_local.h" |
+ |
+namespace base { |
+ |
+namespace { |
+ |
+LazyInstance<ThreadLocalBoolean, LeakyLazyInstanceTraits<ThreadLocalBoolean> > |
+ g_io_disallowed(LINKER_INITIALIZED); |
+ |
+LazyInstance<ThreadLocalBoolean, LeakyLazyInstanceTraits<ThreadLocalBoolean> > |
+ g_singleton_disallowed(LINKER_INITIALIZED); |
+ |
+} // anonymous namespace |
+ |
+// static |
+bool ThreadRestrictions::SetIOAllowed(bool allowed) { |
+ bool previous_disallowed = g_io_disallowed.Get().Get(); |
+ g_io_disallowed.Get().Set(!allowed); |
+ return !previous_disallowed; |
+} |
+ |
+// static |
+void ThreadRestrictions::AssertIOAllowed() { |
+ if (g_io_disallowed.Get().Get()) { |
+ LOG(FATAL) << |
+ "Function marked as IO-only was called from a thread that " |
+ "disallows IO! If this thread really should be allowed to " |
+ "make IO calls, adjust the call to " |
+ "base::ThreadRestrictions::SetIOAllowed() in this thread's " |
+ "startup."; |
+ } |
+} |
+ |
+bool ThreadRestrictions::SetSingletonAllowed(bool allowed) { |
+ bool previous_disallowed = g_singleton_disallowed.Get().Get(); |
+ g_singleton_disallowed.Get().Set(!allowed); |
+ return !previous_disallowed; |
+} |
+ |
+// static |
+void ThreadRestrictions::AssertSingletonAllowed() { |
+ if (g_singleton_disallowed.Get().Get()) { |
+ LOG(FATAL) << "LazyInstance/Singleton is not allowed to be used on this " |
+ << "thread. Most likely it's because this thread is not " |
+ << "joinable, so AtExitManager may have deleted the object " |
+ << "on shutdown, leading to a potential shutdown crash."; |
+ } |
+} |
+ |
+} // namespace base |
+ |
+#endif // NDEBUG |
Property changes on: third_party\libphonenumber\cpp\src\base\threading\thread_restrictions.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |