From c5f75d655467cfc09dd83926ef9072e002f307a4 Mon Sep 17 00:00:00 2001 From: Xavi Ramirez Date: Sun, 6 Aug 2017 01:52:11 +0000 Subject: [PATCH] Fixed another race-condition. Ensure line is completely processed before allowing a checkpoint. --- kcl/kcl.go | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/kcl/kcl.go b/kcl/kcl.go index 76f6c13..a6f4776 100644 --- a/kcl/kcl.go +++ b/kcl/kcl.go @@ -281,11 +281,13 @@ func (kclp *KCLProcess) startLineProcessor( select { case <-next: line, err := kclp.ioHandler.readLine() - if err != nil { - outErr <- err - } else { - out <- line + if err == nil { + if line == "" { + err = fmt.Errorf("Empty read line recieved") + } + err = kclp.handleLine(line) } + outErr <- err case pair := <-checkpoint: err := kclp.processCheckpoint(pair) checkpointErr <- err @@ -297,20 +299,7 @@ func (kclp *KCLProcess) startLineProcessor( func (kclp *KCLProcess) processNextLine() error { kclp.next <- struct{}{} // We're ready for a new line - var err error - var line string - - select { - case err = <-kclp.outErr: - case line = <-kclp.out: - if line == "" { - err = fmt.Errorf("Empty read line recieved") - } else { - err = kclp.handleLine(line) - } - } - - return err + return <-kclp.outErr } func (kclp *KCLProcess) Run() {