Index: base/thread_restrictions.cc |
diff --git a/base/thread_restrictions.cc b/base/thread_restrictions.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5be8ad7133d390341fc1573c54efd64a2b591724 |
--- /dev/null |
+++ b/base/thread_restrictions.cc |
@@ -0,0 +1,42 @@ |
+// 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/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/thread_local.h" |
+ |
+namespace { |
+ |
+static base::LazyInstance<base::ThreadLocalBoolean> |
+ g_io_disallowed(base::LINKER_INITIALIZED); |
+ |
+} // anonymous namespace |
+ |
+namespace base { |
+ |
+// static |
+void ThreadRestrictions::SetIOAllowed(bool allowed) { |
+ g_io_disallowed.Get().Set(!allowed); |
+} |
+ |
+// 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."; |
+ } |
+} |
+ |
+} // namespace base |
+ |
+#endif // NDEBUG |