diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-01 01:01:06 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-01 01:01:06 +0000 |
commit | 34b9963c187a733bef76535521f3de688fffd34f (patch) | |
tree | a0569030e3a2ecc5b9c88d31a2469a380de85346 /base/threading/thread_restrictions.cc | |
parent | 1a2a571b157327f75acd56bd594ef0863481dc32 (diff) | |
download | chromium_src-34b9963c187a733bef76535521f3de688fffd34f.zip chromium_src-34b9963c187a733bef76535521f3de688fffd34f.tar.gz chromium_src-34b9963c187a733bef76535521f3de688fffd34f.tar.bz2 |
Move base/thread.h to base/threading, fix up callers to use the new location.
TEST=it compiles
BUG=none
Review URL: http://codereview.chromium.org/6028009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70345 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/threading/thread_restrictions.cc')
-rw-r--r-- | base/threading/thread_restrictions.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/base/threading/thread_restrictions.cc b/base/threading/thread_restrictions.cc new file mode 100644 index 0000000..a0c24b0 --- /dev/null +++ b/base/threading/thread_restrictions.cc @@ -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 |