From a719cd25a1a9f48f48f2e6a86541b624b5bfe45d Mon Sep 17 00:00:00 2001 From: Reya C Date: Sat, 3 Apr 2021 01:58:25 -0400 Subject: [PATCH] Add concurrency limiting semaphore --- drive-demuxer.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drive-demuxer.go b/drive-demuxer.go index 87fe422..bac12d3 100644 --- a/drive-demuxer.go +++ b/drive-demuxer.go @@ -16,6 +16,7 @@ type TopLevel struct { LeftOutput string CombinedOutput string RightOutput string + OpenHandles chan int } type Step struct { @@ -181,7 +182,7 @@ func (s *Step) ListChildren() []string { results[file.Name()] = true } out := make([]string, 0, len(results)) - for file, _ := range results { + for file := range results { out = append(out, file) } return out @@ -298,7 +299,11 @@ func (s *Step) Walk() { } wg.Add(1) go func() { - defer func() { wg.Done() }() + defer func() { + <-s.OpenHandles + wg.Done() + }() + s.OpenHandles <- 1 substep.Walk() s.RemoveInputDirs(child) }() @@ -314,7 +319,9 @@ func (s *Step) Walk() { } func main() { - settings := TopLevel{} + settings := TopLevel{ + OpenHandles: make(chan int, 300), + } flag.StringVar(&settings.LeftInput, "left-input", "./input/left", "The name of the left side of the input.") flag.StringVar(&settings.RightInput,