From 0a7f3f32263e880ca2841957962988ce28e8b9f8 Mon Sep 17 00:00:00 2001 From: James Read Date: Sat, 26 Apr 2025 21:42:12 +0100 Subject: [PATCH] bugfix: #503 Fix possible race condition in onfileindir* (#576) --- service/internal/onfileindir/fileindir.go | 26 ++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/service/internal/onfileindir/fileindir.go b/service/internal/onfileindir/fileindir.go index 859c282..a2f12bd 100644 --- a/service/internal/onfileindir/fileindir.go +++ b/service/internal/onfileindir/fileindir.go @@ -2,26 +2,32 @@ package onfileindir import ( "fmt" + "os" + "path/filepath" + "github.com/OliveTin/OliveTin/internal/acl" "github.com/OliveTin/OliveTin/internal/config" "github.com/OliveTin/OliveTin/internal/executor" "github.com/OliveTin/OliveTin/internal/filehelper" - "os" - "path/filepath" ) func WatchFilesInDirectory(cfg *config.Config, ex *executor.Executor) { for _, action := range cfg.Actions { for _, dirname := range action.ExecOnFileChangedInDir { - go filehelper.WatchDirectoryWrite(dirname, func(filename string) { - scheduleExec(action, cfg, ex, filename) - }) - } + // Pass values into anonymous function because of this issue + // https://github.com/OliveTin/OliveTin/issues/503 - for _, dirname := range action.ExecOnFileCreatedInDir { - go filehelper.WatchDirectoryCreate(dirname, func(filename string) { - scheduleExec(action, cfg, ex, filename) - }) + go func(act *config.Action, dir string) { + filehelper.WatchDirectoryWrite(dir, func(filename string) { + scheduleExec(act, cfg, ex, filename) + }) + }(action, dirname) + + go func(act *config.Action, dir string) { + filehelper.WatchDirectoryCreate(dir, func(filename string) { + scheduleExec(act, cfg, ex, filename) + }) + }(action, dirname) } } }