Index: webrtc/base/asyncinvoker.cc |
diff --git a/webrtc/base/asyncinvoker.cc b/webrtc/base/asyncinvoker.cc |
index bfd13172f70329598dc9393d41eb660f8877e8f7..e3f33b5123ebc2dbabe849b044b258d579e0f715 100644 |
--- a/webrtc/base/asyncinvoker.cc |
+++ b/webrtc/base/asyncinvoker.cc |
@@ -29,8 +29,8 @@ AsyncInvoker::~AsyncInvoker() { |
// another thread, WITHIN an AsyncInvoked functor, it may do another |
// Thread::Post even after we called MessageQueueManager::Clear(this). So |
// we need to keep calling Clear to discard these posts. |
- MessageQueueManager::Clear(this); |
invocation_complete_.Wait(Event::kForever); |
+ MessageQueueManager::Clear(this); |
nisse-webrtc
2017/05/18 08:04:55
This is subtle (maybe too subtle...).
So at the e
Taylor Brandstetter
2017/05/18 20:54:52
I must have had a brain lapse and forgot that if "
|
} |
} |
@@ -69,7 +69,6 @@ void AsyncInvoker::DoInvoke(const Location& posted_from, |
LOG(LS_WARNING) << "Tried to invoke while destroying the invoker."; |
return; |
} |
- AtomicOps::Increment(&pending_invocations_); |
thread->Post(posted_from, this, id, |
new ScopedMessageData<AsyncClosure>(std::move(closure))); |
} |
@@ -83,7 +82,6 @@ void AsyncInvoker::DoInvokeDelayed(const Location& posted_from, |
LOG(LS_WARNING) << "Tried to invoke while destroying the invoker."; |
return; |
} |
- AtomicOps::Increment(&pending_invocations_); |
thread->PostDelayed(posted_from, delay_ms, this, id, |
new ScopedMessageData<AsyncClosure>(std::move(closure))); |
} |
@@ -111,6 +109,10 @@ void GuardedAsyncInvoker::ThreadDestroyed() { |
thread_ = nullptr; |
} |
+AsyncClosure::AsyncClosure(AsyncInvoker* invoker) : invoker_(invoker) { |
+ AtomicOps::Increment(&invoker_->pending_invocations_); |
nisse-webrtc
2017/05/18 08:04:55
I take it moving the increment here from DoInvoke*
Taylor Brandstetter
2017/05/18 20:54:52
It's still done before anything gets added to the
nisse-webrtc
2017/05/19 06:43:21
I see, I was under the impression that the closure
|
+} |
+ |
AsyncClosure::~AsyncClosure() { |
AtomicOps::Decrement(&invoker_->pending_invocations_); |
nisse-webrtc
2017/05/18 11:12:39
Thinking a bit more, I'm afraids this approach is
Taylor Brandstetter
2017/05/18 20:54:52
That's exactly the issue I was trying to fix in th
nisse-webrtc
2017/05/19 06:43:21
Makes sense. lgtm, then.
nisse-webrtc
2017/05/19 06:48:16
But please update cl title accordingly...
|
invoker_->invocation_complete_.Set(); |