Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: base/task_scheduler/scheduler_worker.cc

Issue 2983143002: Revert of Disable COM Initialization on SchedulerWorkers When COM_INIT_CHECK_HOOK_ENABLED() (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | base/task_scheduler/scheduler_worker_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/task_scheduler/scheduler_worker.h" 5 #include "base/task_scheduler/scheduler_worker.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/task_scheduler/task_tracker.h" 13 #include "base/task_scheduler/task_tracker.h"
14 14
15 #if defined(OS_MACOSX) 15 #if defined(OS_MACOSX)
16 #include "base/mac/scoped_nsautorelease_pool.h" 16 #include "base/mac/scoped_nsautorelease_pool.h"
17 #elif defined(OS_WIN) 17 #elif defined(OS_WIN)
18 #include "base/win/com_init_check_hook.h"
19 #include "base/win/scoped_com_initializer.h" 18 #include "base/win/scoped_com_initializer.h"
20 #endif 19 #endif
21 20
22 namespace base { 21 namespace base {
23 namespace internal { 22 namespace internal {
24 23
25 class SchedulerWorker::Thread : public PlatformThread::Delegate { 24 class SchedulerWorker::Thread : public PlatformThread::Delegate {
26 public: 25 public:
27 ~Thread() override = default; 26 ~Thread() override = default;
28 27
29 static std::unique_ptr<Thread> Create(scoped_refptr<SchedulerWorker> outer) { 28 static std::unique_ptr<Thread> Create(scoped_refptr<SchedulerWorker> outer) {
30 std::unique_ptr<Thread> thread(new Thread(std::move(outer))); 29 std::unique_ptr<Thread> thread(new Thread(std::move(outer)));
31 thread->Initialize(); 30 thread->Initialize();
32 if (thread->thread_handle_.is_null()) 31 if (thread->thread_handle_.is_null())
33 return nullptr; 32 return nullptr;
34 return thread; 33 return thread;
35 } 34 }
36 35
37 // PlatformThread::Delegate. 36 // PlatformThread::Delegate.
38 void ThreadMain() override { 37 void ThreadMain() override {
39 // Set if this thread was detached. 38 // Set if this thread was detached.
40 std::unique_ptr<Thread> detached_thread; 39 std::unique_ptr<Thread> detached_thread;
41 40
42 outer_->delegate_->OnMainEntry(outer_.get()); 41 outer_->delegate_->OnMainEntry(outer_.get());
43 42
44 // A SchedulerWorker starts out waiting for work. 43 // A SchedulerWorker starts out waiting for work.
45 outer_->delegate_->WaitForWork(&wake_up_event_); 44 outer_->delegate_->WaitForWork(&wake_up_event_);
46 45
47 // When defined(COM_INIT_CHECK_HOOK_ENABLED), ignore 46 #if defined(OS_WIN)
48 // SchedulerBackwardCompatibility::INIT_COM_STA to find incorrect uses of
49 // COM that should be running in a COM STA Task Runner.
50 #if defined(OS_WIN) && !defined(COM_INIT_CHECK_HOOK_ENABLED)
51 std::unique_ptr<win::ScopedCOMInitializer> com_initializer; 47 std::unique_ptr<win::ScopedCOMInitializer> com_initializer;
52 if (outer_->backward_compatibility_ == 48 if (outer_->backward_compatibility_ ==
53 SchedulerBackwardCompatibility::INIT_COM_STA) { 49 SchedulerBackwardCompatibility::INIT_COM_STA) {
54 com_initializer = MakeUnique<win::ScopedCOMInitializer>(); 50 com_initializer = MakeUnique<win::ScopedCOMInitializer>();
55 } 51 }
56 #endif 52 #endif
57 53
58 while (!outer_->ShouldExit()) { 54 while (!outer_->ShouldExit()) {
59 DCHECK(outer_); 55 DCHECK(outer_);
60 56
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 // The ordering of the checks is important below. This SchedulerWorker may be 328 // The ordering of the checks is important below. This SchedulerWorker may be
333 // released and outlive |task_tracker_| in unit tests. However, when the 329 // released and outlive |task_tracker_| in unit tests. However, when the
334 // SchedulerWorker is released, |should_exit_| will be set, so check that 330 // SchedulerWorker is released, |should_exit_| will be set, so check that
335 // first. 331 // first.
336 return should_exit_.IsSet() || join_called_for_testing_.IsSet() || 332 return should_exit_.IsSet() || join_called_for_testing_.IsSet() ||
337 task_tracker_->IsShutdownComplete(); 333 task_tracker_->IsShutdownComplete();
338 } 334 }
339 335
340 } // namespace internal 336 } // namespace internal
341 } // namespace base 337 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | base/task_scheduler/scheduler_worker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698