| OLD | NEW | 
|   1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |   1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|   2 // Use of this source code is governed by a BSD-style license that can be |   2 // Use of this source code is governed by a BSD-style license that can be | 
|   3 // found in the LICENSE file. |   3 // found in the LICENSE file. | 
|   4  |   4  | 
|   5 #include "base/threading/thread_restrictions.h" |   5 #include "base/threading/thread_restrictions.h" | 
|   6  |   6  | 
|   7 #if DCHECK_IS_ON() |   7 #if DCHECK_IS_ON() | 
|   8  |   8  | 
|   9 #include "base/lazy_instance.h" |   9 #include "base/lazy_instance.h" | 
|  10 #include "base/logging.h" |  10 #include "base/logging.h" | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|  28 // static |  28 // static | 
|  29 bool ThreadRestrictions::SetIOAllowed(bool allowed) { |  29 bool ThreadRestrictions::SetIOAllowed(bool allowed) { | 
|  30   bool previous_disallowed = g_io_disallowed.Get().Get(); |  30   bool previous_disallowed = g_io_disallowed.Get().Get(); | 
|  31   g_io_disallowed.Get().Set(!allowed); |  31   g_io_disallowed.Get().Set(!allowed); | 
|  32   return !previous_disallowed; |  32   return !previous_disallowed; | 
|  33 } |  33 } | 
|  34  |  34  | 
|  35 // static |  35 // static | 
|  36 void ThreadRestrictions::AssertIOAllowed() { |  36 void ThreadRestrictions::AssertIOAllowed() { | 
|  37   if (g_io_disallowed.Get().Get()) { |  37   if (g_io_disallowed.Get().Get()) { | 
|  38     LOG(FATAL) << |  38     NOTREACHED() << | 
|  39         "Function marked as IO-only was called from a thread that " |  39         "Function marked as IO-only was called from a thread that " | 
|  40         "disallows IO!  If this thread really should be allowed to " |  40         "disallows IO!  If this thread really should be allowed to " | 
|  41         "make IO calls, adjust the call to " |  41         "make IO calls, adjust the call to " | 
|  42         "base::ThreadRestrictions::SetIOAllowed() in this thread's " |  42         "base::ThreadRestrictions::SetIOAllowed() in this thread's " | 
|  43         "startup."; |  43         "startup."; | 
|  44   } |  44   } | 
|  45 } |  45 } | 
|  46  |  46  | 
|  47 // static |  47 // static | 
|  48 bool ThreadRestrictions::SetSingletonAllowed(bool allowed) { |  48 bool ThreadRestrictions::SetSingletonAllowed(bool allowed) { | 
|  49   bool previous_disallowed = g_singleton_disallowed.Get().Get(); |  49   bool previous_disallowed = g_singleton_disallowed.Get().Get(); | 
|  50   g_singleton_disallowed.Get().Set(!allowed); |  50   g_singleton_disallowed.Get().Set(!allowed); | 
|  51   return !previous_disallowed; |  51   return !previous_disallowed; | 
|  52 } |  52 } | 
|  53  |  53  | 
|  54 // static |  54 // static | 
|  55 void ThreadRestrictions::AssertSingletonAllowed() { |  55 void ThreadRestrictions::AssertSingletonAllowed() { | 
|  56   if (g_singleton_disallowed.Get().Get()) { |  56   if (g_singleton_disallowed.Get().Get()) { | 
|  57     LOG(FATAL) << "LazyInstance/Singleton is not allowed to be used on this " |  57     NOTREACHED() << "LazyInstance/Singleton is not allowed to be used on this " | 
|  58                << "thread.  Most likely it's because this thread is not " |  58                  << "thread.  Most likely it's because this thread is not " | 
|  59                << "joinable (or the current task is running with " |  59                  << "joinable (or the current task is running with " | 
|  60                << "TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN semantics), so " |  60                  << "TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN semantics), so " | 
|  61                << "AtExitManager may have deleted the object on shutdown, " |  61                  << "AtExitManager may have deleted the object on shutdown, " | 
|  62                << "leading to a potential shutdown crash. If you need to use " |  62                  << "leading to a potential shutdown crash. If you need to use " | 
|  63                << "the object from this context, it'll have to be updated to " |  63                  << "the object from this context, it'll have to be updated to " | 
|  64                << "use Leaky traits."; |  64                  << "use Leaky traits."; | 
|  65   } |  65   } | 
|  66 } |  66 } | 
|  67  |  67  | 
|  68 // static |  68 // static | 
|  69 void ThreadRestrictions::DisallowWaiting() { |  69 void ThreadRestrictions::DisallowWaiting() { | 
|  70   g_wait_disallowed.Get().Set(true); |  70   g_wait_disallowed.Get().Set(true); | 
|  71 } |  71 } | 
|  72  |  72  | 
|  73 // static |  73 // static | 
|  74 void ThreadRestrictions::AssertWaitAllowed() { |  74 void ThreadRestrictions::AssertWaitAllowed() { | 
|  75   if (g_wait_disallowed.Get().Get()) { |  75   if (g_wait_disallowed.Get().Get()) { | 
|  76     LOG(FATAL) << "Waiting is not allowed to be used on this thread to prevent " |  76     NOTREACHED() << "Waiting is not allowed to be used on this thread to " | 
|  77                << "jank and deadlock."; |  77                  << "prevent jank and deadlock."; | 
|  78   } |  78   } | 
|  79 } |  79 } | 
|  80  |  80  | 
|  81 bool ThreadRestrictions::SetWaitAllowed(bool allowed) { |  81 bool ThreadRestrictions::SetWaitAllowed(bool allowed) { | 
|  82   bool previous_disallowed = g_wait_disallowed.Get().Get(); |  82   bool previous_disallowed = g_wait_disallowed.Get().Get(); | 
|  83   g_wait_disallowed.Get().Set(!allowed); |  83   g_wait_disallowed.Get().Set(!allowed); | 
|  84   return !previous_disallowed; |  84   return !previous_disallowed; | 
|  85 } |  85 } | 
|  86  |  86  | 
|  87 }  // namespace base |  87 }  // namespace base | 
|  88  |  88  | 
|  89 #endif  // DCHECK_IS_ON() |  89 #endif  // DCHECK_IS_ON() | 
| OLD | NEW |