From d101374bc8606fece3eed016b89a21e617d6437b Mon Sep 17 00:00:00 2001 From: Alessandro Siragusa Date: Fri, 31 Jan 2020 15:20:45 +0100 Subject: [PATCH] Fix race condition --- fsm.go | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/fsm.go b/fsm.go index 9619111..4984eb0 100644 --- a/fsm.go +++ b/fsm.go @@ -87,29 +87,16 @@ func (r Ruleset) Permitted(start *State, goal *State) error { attempt := T{start.ID(), goal.ID()} if guards, ok := r[attempt]; ok { - outcome := make(chan error) for _, guard := range guards { - go func(g Guard) { - err := g(start, goal) - start.id = start.ID() - goal.id = goal.ID() - outcome <- err - }(guard) - } - // spew.Dump(start, goal) - // fmt.Println("---") - - for range guards { - select { - case err := <-outcome: - if err != nil { - return fmt.Errorf(errGuardFailedFormat, - start.ID(), goal.ID(), err.Error()) - } + err := guard(start, goal) + if err != nil { + return fmt.Errorf(errGuardFailedFormat, start.ID(), goal.ID(), err.Error()) } - } + start.id = start.ID() + goal.id = goal.ID() + } return nil } return fmt.Errorf(errNoRulesFormat, start.ID(), goal.ID())