// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Test case for issue 3106: Better synchronization of // parser after certain syntax errors. package main func f() { var m Mutex c := MakeCond(&m) percent := 0 const step = 10 for i := 0; i < 5; i++ { go func() { for { // Emulates some useful work. time.Sleep(1e8) m.Lock() defer if /* ERROR "expected ';', found 'if'" */ percent == 100 { m.Unlock() break } percent++ if percent % step == 0 { //c.Signal() } m.Unlock() } }() } for { m.Lock() if percent == 0 || percent % step != 0 { c.Wait() } fmt.Print(",") if percent == 100 { m.Unlock() break } m.Unlock() } }