From 9690928b76d86c07eaa3c5e5247314a6da495827 Mon Sep 17 00:00:00 2001 From: InfiniteStash <117855276+InfiniteStash@users.noreply.github.com> Date: Sat, 2 May 2026 09:35:56 +0200 Subject: [PATCH] Use mutex for batch fingerprint submissions --- internal/api/resolver_mutation_stash_box.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/api/resolver_mutation_stash_box.go b/internal/api/resolver_mutation_stash_box.go index 836c40197..0886e1eca 100644 --- a/internal/api/resolver_mutation_stash_box.go +++ b/internal/api/resolver_mutation_stash_box.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "strconv" + "sync" "time" "github.com/stashapp/stash/internal/manager" @@ -14,6 +15,8 @@ import ( "github.com/stashapp/stash/pkg/stashbox" ) +var fingerprintSubmissionMu sync.Mutex + func (r *mutationResolver) SubmitStashBoxFingerprints(ctx context.Context, input StashBoxFingerprintSubmissionInput) (bool, error) { b, err := resolveStashBox(input.StashBoxIndex, input.StashBoxEndpoint) //nolint:staticcheck if err != nil { @@ -303,7 +306,13 @@ func (r *mutationResolver) SubmitFingerprintSubmissions(ctx context.Context, sta if len(submissions) > 40 { // Submit async to avoid timeouts for large batches - go r.submitFingerprintBatch(client, submissions, sceneMap) + if !fingerprintSubmissionMu.TryLock() { + return false, fmt.Errorf("fingerprint submission already in progress") + } + go func() { + defer fingerprintSubmissionMu.Unlock() + r.submitFingerprintBatch(client, submissions, sceneMap) + }() } else { r.submitFingerprintBatch(client, submissions, sceneMap) }