From 31f163a6b4370a2a6c4aad3df9f2608bb9f85072 Mon Sep 17 00:00:00 2001 From: Eliyahu-Machluf Date: Tue, 9 May 2017 13:20:41 +0300 Subject: [PATCH] fix deadlock at TransferHandle::WaitUntilFinished - the waiting thread is notified when status is changed to finished, however it checks also if there are no pending parts. so if it got notified before part status was changed, it encounter deadlock. the right order is first change part status and then change the object status to failed --- aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp b/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp index 4eb6d270b80..89278aa8353 100644 --- a/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp +++ b/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp @@ -501,9 +501,9 @@ namespace Aws } else { - transferContext->handle->UpdateStatus(DetermineIfFailedOrCanceled(*transferContext->handle)); transferContext->handle->ChangePartToFailed(transferContext->partState); transferContext->handle->SetError(outcome.GetError()); + transferContext->handle->UpdateStatus(DetermineIfFailedOrCanceled(*transferContext->handle)); TriggerErrorCallback(*transferContext->handle, outcome.GetError()); }