Commit c3a7b6f9 authored by Xiaohui Chen's avatar Xiaohui Chen Committed by Commit Bot

assistant: fix crash when register fallback media handler

It is possible that the callback from libassistant comes right after
assistant_manager is stopped/reset.  Let's guard this case.

Bug: 879390
Test: locally build
Change-Id: Iea2fe174a02627e6d61406a1319d172470028afd
Reviewed-on: https://chromium-review.googlesource.com/1198105Reviewed-by: default avatarMuyuan Li <muyuanli@chromium.org>
Commit-Queue: Xiaohui Chen <xiaohuic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587879}
parent b6153c40
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chromeos/services/assistant/assistant_manager_service_impl.h" #include "chromeos/services/assistant/assistant_manager_service_impl.h"
#include <algorithm>
#include <utility> #include <utility>
#include "ash/public/interfaces/constants.mojom.h" #include "ash/public/interfaces/constants.mojom.h"
...@@ -133,6 +134,12 @@ void AssistantManagerServiceImpl::SetAccessToken( ...@@ -133,6 +134,12 @@ void AssistantManagerServiceImpl::SetAccessToken(
} }
void AssistantManagerServiceImpl::RegisterFallbackMediaHandler() { void AssistantManagerServiceImpl::RegisterFallbackMediaHandler() {
// This is a callback from LibAssistant, it is async from LibAssistant thread.
// It is possible that when it reaches here, the assistant_manager_ has
// been stopped.
if (!assistant_manager_internal_)
return;
// Register handler for media actions. // Register handler for media actions.
assistant_manager_internal_->RegisterFallbackMediaHandler( assistant_manager_internal_->RegisterFallbackMediaHandler(
[this](std::string play_media_args_proto) { [this](std::string play_media_args_proto) {
...@@ -735,8 +742,13 @@ void AssistantManagerServiceImpl::HandleUpdateSettingsResponse( ...@@ -735,8 +742,13 @@ void AssistantManagerServiceImpl::HandleUpdateSettingsResponse(
callback.Run(result); callback.Run(result);
} }
// assistant_client::DeviceStateListener overrides
// Run on LibAssistant threads
void AssistantManagerServiceImpl::OnStartFinished() { void AssistantManagerServiceImpl::OnStartFinished() {
RegisterFallbackMediaHandler(); main_thread_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&AssistantManagerServiceImpl::RegisterFallbackMediaHandler,
weak_factory_.GetWeakPtr()));
} }
void AssistantManagerServiceImpl::OnTimerSoundingStarted() { void AssistantManagerServiceImpl::OnTimerSoundingStarted() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment