diff --git a/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.cpp b/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.cpp index e2bc23b141e65bc3a0cf87e3d3c22843f067bc58..7a0ec21ce0f79f4dccddba7cc7c07d399af81f9f 100755 --- a/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.cpp +++ b/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.cpp @@ -168,10 +168,14 @@ int MultiVerSyncStateMachine::ReceiveMessageCallback(Message *inMsg) return errCode; } -void MultiVerSyncStateMachine::StepToTimeout() +void MultiVerSyncStateMachine::StepToTimeout(TimerId timerId) { { std::lock_guard lock(stateMachineLock_); + TimerId timer = syncContext_->GetTimerId(); + if (timer != timerId) { + return; + } currentState_ = SYNC_TIME_OUT; } Abort(); diff --git a/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.h b/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.h index b4c6689f3d6a1f99d2410dbbef6009f7677664b8..ea02f5d4e551848543d9788827c4992b5860d6ff 100755 --- a/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.h +++ b/services/distributeddataservice/libs/distributeddb/syncer/src/multi_ver_sync_state_machine.h @@ -56,7 +56,7 @@ protected: void SyncStep() override; // SyncOperation is timeout, step to timeout state - void StepToTimeout() override; + void StepToTimeout(TimerId timerId) override; void SyncStepInnerLocked() override; diff --git a/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.cpp b/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.cpp index a59713da0dd6a324b45695cdbaccfe60e8231669..1de9493fa4fa669b03970af5c9c721923a2d2e55 100755 --- a/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.cpp +++ b/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.cpp @@ -814,9 +814,13 @@ int SingleVerSyncStateMachine::ControlPktRecv(Message *inMsg) return errCode; } -void SingleVerSyncStateMachine::StepToTimeout() +void SingleVerSyncStateMachine::StepToTimeout(TimerId timerId) { std::lock_guard lock(stateMachineLock_); + TimerId timer = syncContext_->GetTimerId(); + if (timer != timerId) { + return; + } SwitchStateAndStep(Event::TIME_OUT_EVENT); } diff --git a/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.h b/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.h index 965c13eebaf8fec07b65ec7b4f4d6f279cdd8b8b..587ec04a2b8c9d69c479e4df27906856cd34ce13 100755 --- a/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.h +++ b/services/distributeddataservice/libs/distributeddb/syncer/src/single_ver_sync_state_machine.h @@ -105,7 +105,7 @@ protected: void SyncStep() override; // SyncOperation is timeout, step to timeout state - void StepToTimeout() override; + void StepToTimeout(TimerId timerId) override; void SyncStepInnerLocked() override; diff --git a/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.cpp b/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.cpp index d07877666cd05c140402c4fb8e67a715b555378f..53d7bb83c22cb3249080f945922972afaf3a14fe 100755 --- a/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.cpp +++ b/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.cpp @@ -87,7 +87,7 @@ int SyncStateMachine::TimeoutCallback(TimerId timerId) if (retryTime >= syncContext_->GetSyncRetryTimes() || !syncContext_->IsSyncTaskNeedRetry()) { LOGI("[SyncStateMachine][Timeout] TimeoutCallback retryTime:%d", retryTime); syncContext_->UnlockObj(); - StepToTimeout(); + StepToTimeout(timerId); syncContext_->LockObj(); return E_OK; } @@ -169,7 +169,6 @@ int SyncStateMachine::ExecNextTask() syncContext_->MoveToNextTarget(); if (syncContext_->IsCurrentSyncTaskCanBeSkipped()) { syncContext_->SetOperationStatus(SyncOperation::OP_FINISHED_ALL); - syncContext_->SetTaskExecStatus(ISyncTaskContext::FINISHED); continue; } int errCode = PrepareNextSyncTask(); diff --git a/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.h b/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.h index da86fceb89ffe46b6f204190d22fb38c0802f5c7..cf493e9e5ad100055172fcfb94cf9c3bd65fb412 100755 --- a/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.h +++ b/services/distributeddataservice/libs/distributeddb/syncer/src/sync_state_machine.h @@ -68,7 +68,7 @@ public: protected: // SyncOperation is timeout, step to timeout state - virtual void StepToTimeout() = 0; + virtual void StepToTimeout(TimerId timerId) = 0; // Step the SingleVerSyncStateMachine virtual void SyncStep() = 0;