| 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
|
|
|