aboutsummaryrefslogtreecommitdiffstats
path: root/tools/execprog
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-11-28 11:27:44 +0100
committerDmitry Vyukov <dvyukov@google.com>2015-11-28 11:27:44 +0100
commit8bda33214d138f962ddc6e02d8d12ed08de66bfd (patch)
treef76c67ad43de884d2db96e1d84702dceaba1dede /tools/execprog
parentb1e98de8a6c6e31544193f74130911d8b45bbd0a (diff)
execprog: rate limit printing
Otherwise it happen too frequently when executing a single program in a loop.
Diffstat (limited to 'tools/execprog')
-rw-r--r--tools/execprog/execprog.go13
1 files changed, 9 insertions, 4 deletions
diff --git a/tools/execprog/execprog.go b/tools/execprog/execprog.go
index f85925125..dcb2a0b8b 100644
--- a/tools/execprog/execprog.go
+++ b/tools/execprog/execprog.go
@@ -15,7 +15,6 @@ import (
"log"
"os"
"sync"
- "sync/atomic"
"time"
"github.com/google/syzkaller/cover"
@@ -80,7 +79,9 @@ func main() {
var wg sync.WaitGroup
wg.Add(*flagProcs)
- var pos uint32
+ var posMu sync.Mutex
+ var pos int
+ var lastPrint time.Time
for p := 0; p < *flagProcs; p++ {
go func() {
env, err := ipc.MakeEnv(*flagExecutor, *flagTimeout, flags)
@@ -88,10 +89,14 @@ func main() {
log.Fatalf("failed to create ipc env: %v", err)
}
for {
- idx := int(atomic.AddUint32(&pos, 1) - 1)
- if idx%len(progs) == 0 {
+ posMu.Lock()
+ idx := pos
+ pos++
+ if idx%len(progs) == 0 && time.Since(lastPrint) > 5*time.Second {
log.Printf("executed %v programs\n", idx)
+ lastPrint = time.Now()
}
+ posMu.Unlock()
if !*flagLoop && idx >= len(progs) {
env.Close()
wg.Done()