1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// Use of this source code is governed by a BSD-style license that can be 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// found in the LICENSE file. 4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "content/public/utility/utility_thread.h" 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "base/lazy_instance.h" 8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "base/threading/thread_local.h" 9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovnamespace content { 11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// Keep the global UtilityThread in a TLS slot so it is impossible to access 13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// incorrectly from the wrong thread. 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic base::LazyInstance<base::ThreadLocalPointer<UtilityThread> >::Leaky 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov lazy_tls = LAZY_INSTANCE_INITIALIZER; 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovUtilityThread* UtilityThread::Get() { 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return lazy_tls.Pointer()->Get(); 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovUtilityThread::UtilityThread() { 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov lazy_tls.Pointer()->Set(this); 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovUtilityThread::~UtilityThread() { 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov lazy_tls.Pointer()->Set(NULL); 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} // namespace content 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov