From 72dc81ade2b89eb8d7e7785f494ba17865155edb Mon Sep 17 00:00:00 2001 From: Francis Tsui Date: Wed, 31 Jul 2024 12:03:26 -0700 Subject: [PATCH] Callback from FileHandler needs to run on service thread. PiperOrigin-RevId: 658093459 --- sharing/nearby_sharing_service_impl.cc | 51 ++++++++++++++------------ 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/sharing/nearby_sharing_service_impl.cc b/sharing/nearby_sharing_service_impl.cc index 4a921aec..795ec8c1 100644 --- a/sharing/nearby_sharing_service_impl.cc +++ b/sharing/nearby_sharing_service_impl.cc @@ -3157,35 +3157,40 @@ void NearbySharingServiceImpl::IncomingPayloadTransferUpdate( void NearbySharingServiceImpl::OnIncomingFilesMetadataUpdated( int64_t share_target_id, TransferMetadata metadata, bool success) { - IncomingShareSession* session = GetIncomingShareSession(share_target_id); - if (!session) { - // ShareTarget already disconnected. - return; - } if (!success) { metadata = TransferMetadataBuilder() .set_status(TransferMetadata::Status::kIncompletePayloads) .build(); } - fast_initiation_scanner_cooldown_timer_ = std::make_unique( - *service_thread_, "fast_initiation_scanner_cooldown_timer", - kFastInitiationScannerCooldown, [this]() { - fast_initiation_scanner_cooldown_timer_.reset(); - InvalidateFastInitiationScanning(); - }); - // Make sure to call this before calling Disconnect, or we risk losing some - // transfer updates in the receive case due to the Disconnect call cleaning up - // share targets. - session->UpdateTransferMetadata(metadata); + RunOnNearbySharingServiceThread( + "update_files_origin_metadata", + [this, share_target_id, metadata = std::move(metadata)]() { + IncomingShareSession* session = + GetIncomingShareSession(share_target_id); + if (!session) { + // ShareTarget already disconnected. + return; + } + fast_initiation_scanner_cooldown_timer_ = std::make_unique( + *service_thread_, "fast_initiation_scanner_cooldown_timer", + kFastInitiationScannerCooldown, [this]() { + fast_initiation_scanner_cooldown_timer_.reset(); + InvalidateFastInitiationScanning(); + }); + // Make sure to call this before calling Disconnect, or we risk losing + // some transfer updates in the receive case due to the Disconnect call + // cleaning up share targets. + session->UpdateTransferMetadata(metadata); - if (TransferMetadata::IsFinalStatus(metadata.status())) { - // Cancellation has its own disconnection strategy, possibly adding a - // delay before disconnection to provide the other party time to process - // the cancellation. - if (metadata.status() != TransferMetadata::Status::kCancelled) { - session->Disconnect(); - } - } + if (TransferMetadata::IsFinalStatus(metadata.status())) { + // Cancellation has its own disconnection strategy, possibly adding a + // delay before disconnection to provide the other party time to + // process the cancellation. + if (metadata.status() != TransferMetadata::Status::kCancelled) { + session->Disconnect(); + } + } + }); } void NearbySharingServiceImpl::OutgoingPayloadTransferUpdate(