| Index: headless/public/util/deterministic_dispatcher.cc
|
| diff --git a/headless/public/util/deterministic_dispatcher.cc b/headless/public/util/deterministic_dispatcher.cc
|
| index 70696eaeaa98a2736c7c31e7d927f0334328e719..20982db898c8088440bc98921fdcbbb2755dab79 100644
|
| --- a/headless/public/util/deterministic_dispatcher.cc
|
| +++ b/headless/public/util/deterministic_dispatcher.cc
|
| @@ -15,7 +15,8 @@ namespace headless {
|
| DeterministicDispatcher::DeterministicDispatcher(
|
| scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner)
|
| : io_thread_task_runner_(std::move(io_thread_task_runner)),
|
| - dispatch_pending_(false) {}
|
| + dispatch_pending_(false),
|
| + weak_ptr_factory_(this) {}
|
|
|
| DeterministicDispatcher::~DeterministicDispatcher() {}
|
|
|
| @@ -63,7 +64,7 @@ void DeterministicDispatcher::MaybeDispatchJobLocked() {
|
| io_thread_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&DeterministicDispatcher::MaybeDispatchJobOnIOThreadTask,
|
| - base::Unretained(this)));
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| }
|
|
|
| void DeterministicDispatcher::MaybeDispatchJobOnIOThreadTask() {
|
| @@ -72,8 +73,10 @@ void DeterministicDispatcher::MaybeDispatchJobOnIOThreadTask() {
|
|
|
| {
|
| base::AutoLock lock(lock_);
|
| - CHECK(!pending_requests_.empty());
|
| dispatch_pending_ = false;
|
| + // If the job got deleted, |pending_requests_| may be empty.
|
| + if (pending_requests_.empty())
|
| + return;
|
| job = pending_requests_.front();
|
| StatusMap::const_iterator it = ready_status_map_.find(job);
|
| // Bail out if the oldest job is not be ready for dispatch yet.
|
|
|