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

Side by Side Diff: webrtc/base/asyncinvoker.cc

Issue 2871403003: Delete unused features of AsyncInvoke. (Closed)
Patch Set: Rebased. Created 3 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 // We should never get more than one notification about the thread dying. 109 // We should never get more than one notification about the thread dying.
110 RTC_DCHECK(thread_ != nullptr); 110 RTC_DCHECK(thread_ != nullptr);
111 thread_ = nullptr; 111 thread_ = nullptr;
112 } 112 }
113 113
114 AsyncClosure::~AsyncClosure() { 114 AsyncClosure::~AsyncClosure() {
115 AtomicOps::Decrement(&invoker_->pending_invocations_); 115 AtomicOps::Decrement(&invoker_->pending_invocations_);
116 invoker_->invocation_complete_.Set(); 116 invoker_->invocation_complete_.Set();
117 } 117 }
118 118
119 NotifyingAsyncClosureBase::NotifyingAsyncClosureBase(
120 AsyncInvoker* invoker,
121 const Location& callback_posted_from,
122 Thread* calling_thread)
123 : AsyncClosure(invoker),
124 callback_posted_from_(callback_posted_from),
125 calling_thread_(calling_thread) {
126 calling_thread->SignalQueueDestroyed.connect(
127 this, &NotifyingAsyncClosureBase::CancelCallback);
128 // Note: We don't need to listen for the invoker being destroyed, because it
129 // will wait for this closure to be destroyed (and pending_invocations_ to go
130 // to 0) before its destructor completes.
131 }
132
133 NotifyingAsyncClosureBase::~NotifyingAsyncClosureBase() {
134 disconnect_all();
135 }
136
137 void NotifyingAsyncClosureBase::TriggerCallback() {
138 CritScope cs(&crit_);
139 if (!CallbackCanceled() && !callback_.empty()) {
140 invoker_->AsyncInvoke<void>(callback_posted_from_, calling_thread_,
141 callback_);
142 }
143 }
144
145 void NotifyingAsyncClosureBase::CancelCallback() {
146 // If the callback is triggering when this is called, block the
147 // destructor of the dying object here by waiting until the callback
148 // is done triggering.
149 CritScope cs(&crit_);
150 // calling_thread_ == nullptr means do not trigger the callback.
151 calling_thread_ = nullptr;
152 }
153
154 } // namespace rtc 119 } // namespace rtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698