15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_THREADING_NON_THREAD_SAFE_IMPL_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_THREADING_NON_THREAD_SAFE_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread_checker_impl.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Full implementation of NonThreadSafe, for debug mode or for occasional 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// temporary use in release mode e.g. when you need to CHECK on a thread 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bug that only occurs in the wild. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: You should almost always use the NonThreadSafe class to get 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the right version of the class for your build configuration. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BASE_EXPORT NonThreadSafeImpl { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CalledOnValidThread() const; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~NonThreadSafeImpl(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Changes the thread that is checked for in CalledOnValidThread. The next 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // call to CalledOnValidThread will attach this class to a new thread. It is 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // up to the NonThreadSafe derived class to decide to expose this or not. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This may be useful when an object may be created on one thread and then 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used exclusively on another thread. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DetachFromThread(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThreadCheckerImpl thread_checker_; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BASE_THREADING_NON_THREAD_SAFE_IMPL_H_ 40