Commit ebbd1d02 authored by Bailey Berro's avatar Bailey Berro Committed by Commit Bot

Do not pass unretained pointer to replies

This change fixes an issue when calling PostTaskWithTraitsAndReply with a
reply that has an unretained pointer to the member class. Because of a race in
tests, SmbService would be torn down and the reply would be run with a pointer
to SmbService resulting in a crash.

Bug: chromium:757625
Change-Id: Ide6b8dd4e05032c504152fafab88ec561d40e30a
Reviewed-on: https://chromium-review.googlesource.com/1195845Reviewed-by: default avatarZentaro Kavanagh <zentaro@chromium.org>
Commit-Queue: Bailey Berro <baileyberro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587325}
parent 6c52d504
......@@ -372,10 +372,9 @@ AbortCallback SmbFileSystem::WriteFile(
const std::vector<uint8_t> data(buffer->data(), buffer->data() + length);
if (!temp_file_manager_) {
SmbTask task =
base::BindOnce(base::IgnoreResult(&SmbFileSystem::CallWriteFile),
base::Unretained(this), file_handle, std::move(data),
offset, length, std::move(callback));
SmbTask task = base::BindOnce(
base::IgnoreResult(&SmbFileSystem::CallWriteFile), AsWeakPtr(),
file_handle, std::move(data), offset, length, std::move(callback));
InitTempFileManagerAndExecuteTask(std::move(task));
// The call to init temp_file_manager_ will not be abortable since it is
// asynchronous.
......
......@@ -299,7 +299,7 @@ void SmbService::SetupTempFileManagerAndCompleteSetup() {
base::OnceClosure task =
base::BindOnce(&SmbService::InitTempFileManager, base::Unretained(this));
base::OnceClosure reply =
base::BindOnce(&SmbService::CompleteSetup, base::Unretained(this));
base::BindOnce(&SmbService::CompleteSetup, AsWeakPtr());
base::PostTaskWithTraitsAndReply(FROM_HERE, task_traits, std::move(task),
std::move(reply));
......
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