Skip to content

Commit 8c5aa55

Browse files
committed
fix: prevent race condition in checkpoint service initialization
- Only assign service to cline.checkpointService after successful initialization - Add proper cleanup on initialization failure - Prevents service from being in inconsistent state if Git check fails
1 parent 8ae1a2f commit 8c5aa55

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/core/checkpoints/index.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,19 @@ export async function getCheckpointService(
8181

8282
const service = RepoPerTaskCheckpointService.create(options)
8383
cline.checkpointServiceInitializing = true
84-
cline.checkpointService = service
8584

8685
// Check if Git is installed before initializing the service
87-
// Note: This is intentionally fire-and-forget to match the original IIFE pattern
88-
// The service is returned immediately while Git check happens asynchronously
89-
await checkGitInstallation(cline, service, log, provider)
90-
91-
return service
86+
// Only assign the service after successful initialization
87+
try {
88+
await checkGitInstallation(cline, service, log, provider)
89+
cline.checkpointService = service
90+
return service
91+
} catch (err) {
92+
// Clean up on failure
93+
cline.checkpointServiceInitializing = false
94+
cline.enableCheckpoints = false
95+
throw err
96+
}
9297
} catch (err) {
9398
log(`[Task#getCheckpointService] ${err.message}`)
9499
cline.enableCheckpoints = false

0 commit comments

Comments
 (0)