Skip to content

Commit 951cf45

Browse files
Xiaohui ChenXiaohui Chen
authored andcommitted
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/1198105 Reviewed-by: Muyuan Li <[email protected]> Commit-Queue: Xiaohui Chen <[email protected]> Cr-Original-Commit-Position: refs/heads/master@{#587879}(cherry picked from commit c3a7b6f) Reviewed-on: https://chromium-review.googlesource.com/1207930 Reviewed-by: Xiaohui Chen <[email protected]> Cr-Commit-Position: refs/branch-heads/3538@{#58} Cr-Branched-From: 79f7c91-refs/heads/master@{#587811}
1 parent b5260c8 commit 951cf45

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

chromeos/services/assistant/assistant_manager_service_impl.cc

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include "chromeos/services/assistant/assistant_manager_service_impl.h"
66

7+
#include <algorithm>
78
#include <utility>
89

910
#include "ash/public/interfaces/constants.mojom.h"
@@ -133,6 +134,12 @@ void AssistantManagerServiceImpl::SetAccessToken(
133134
}
134135

135136
void AssistantManagerServiceImpl::RegisterFallbackMediaHandler() {
137+
// This is a callback from LibAssistant, it is async from LibAssistant thread.
138+
// It is possible that when it reaches here, the assistant_manager_ has
139+
// been stopped.
140+
if (!assistant_manager_internal_)
141+
return;
142+
136143
// Register handler for media actions.
137144
assistant_manager_internal_->RegisterFallbackMediaHandler(
138145
[this](std::string play_media_args_proto) {
@@ -735,8 +742,13 @@ void AssistantManagerServiceImpl::HandleUpdateSettingsResponse(
735742
callback.Run(result);
736743
}
737744

745+
// assistant_client::DeviceStateListener overrides
746+
// Run on LibAssistant threads
738747
void AssistantManagerServiceImpl::OnStartFinished() {
739-
RegisterFallbackMediaHandler();
748+
main_thread_task_runner_->PostTask(
749+
FROM_HERE,
750+
base::BindOnce(&AssistantManagerServiceImpl::RegisterFallbackMediaHandler,
751+
weak_factory_.GetWeakPtr()));
740752
}
741753

742754
void AssistantManagerServiceImpl::OnTimerSoundingStarted() {

0 commit comments

Comments
 (0)