@@ -720,29 +720,9 @@ func createConversationHistoryRepairBackupDir(home string) (string, error) {
720720}
721721
722722func acquireConversationHistoryRepairLock (home string ) (func (), error ) {
723- lockDir := filepath .Join (home , "tmp" , "provider-sync.lock" )
724- if err := os .MkdirAll (filepath .Dir (lockDir ), 0o755 ); err != nil {
725- return nil , fmt .Errorf ("创建历史维护锁目录失败:%w" , err )
726- }
727- acquired := false
728- if err := os .Mkdir (lockDir , 0o755 ); err == nil {
729- acquired = true
730- } else if stale , reason := providerSyncLockStale (lockDir , time .Now ()); stale {
731- appendDiagnosticLog ("conversation_history_repair.stale_lock_removed" , map [string ]any {"lock" : lockDir , "reason" : reason })
732- if removeErr := os .RemoveAll (lockDir ); removeErr == nil {
733- if retryErr := os .Mkdir (lockDir , 0o755 ); retryErr == nil {
734- acquired = true
735- }
736- }
737- }
738- if ! acquired {
739- return nil , errors .New ("另一个历史会话维护任务正在运行,请稍后重试" )
740- }
741- release := func () { _ = os .RemoveAll (lockDir ) }
742- owner := []byte (fmt .Sprintf (`{"pid":%d,"startedAt":%d,"operation":"conversation-history-repair"}` , os .Getpid (), time .Now ().Unix ()))
743- if err := os .WriteFile (filepath .Join (lockDir , "owner.json" ), owner , 0o644 ); err != nil {
744- release ()
745- return nil , fmt .Errorf ("写入历史维护锁失败:%w" , err )
723+ release , err := acquireProviderSyncLock (home , "conversation-history-repair" )
724+ if err != nil {
725+ return nil , fmt .Errorf ("另一个历史会话维护任务正在运行,请稍后重试:%w" , err )
746726 }
747727 return release , nil
748728}
0 commit comments