syz-fuzzer: fix manager polling

We need to always poll manager to send stats/maxsignal,
we just need not request candidates if we have plenty of work.
This commit is contained in:
Dmitry Vyukov 2017-10-20 11:17:22 +02:00
parent 9b5612df77
commit 6755f62592
3 changed files with 18 additions and 12 deletions

View File

@ -51,9 +51,10 @@ type NewInputArgs struct {
}
type PollArgs struct {
Name string
MaxSignal []uint32
Stats map[string]uint64
Name string
NeedCandidates bool
MaxSignal []uint32
Stats map[string]uint64
}
type PollRes struct {

View File

@ -346,15 +346,16 @@ func main() {
}
if poll || time.Since(lastPoll) > 10*time.Second {
triageMu.RLock()
if len(candidates) > *flagProcs {
triageMu.RUnlock()
needCandidates := len(candidates) < *flagProcs
triageMu.RUnlock()
if !needCandidates && poll {
continue
}
triageMu.RUnlock()
a := &PollArgs{
Name: *flagName,
Stats: make(map[string]uint64),
Name: *flagName,
NeedCandidates: needCandidates,
Stats: make(map[string]uint64),
}
signalMu.Lock()
a.MaxSignal = make([]uint32, 0, len(newSignal))
@ -390,6 +391,8 @@ func main() {
if err := manager.Call("Manager.Poll", a, r); err != nil {
panic(err)
}
Logf(1, "poll: candidates=%v inputs=%v signal=%v",
len(r.Candidates), len(r.NewInputs), len(r.MaxSignal))
if len(r.MaxSignal) != 0 {
signalMu.Lock()
for _, s := range r.MaxSignal {

View File

@ -996,10 +996,12 @@ func (mgr *Manager) Poll(a *PollArgs, r *PollRes) error {
f.inputs = nil
}
for i := 0; i < mgr.cfg.Procs && len(mgr.candidates) > 0; i++ {
last := len(mgr.candidates) - 1
r.Candidates = append(r.Candidates, mgr.candidates[last])
mgr.candidates = mgr.candidates[:last]
if a.NeedCandidates {
for i := 0; i < mgr.cfg.Procs && len(mgr.candidates) > 0; i++ {
last := len(mgr.candidates) - 1
r.Candidates = append(r.Candidates, mgr.candidates[last])
mgr.candidates = mgr.candidates[:last]
}
}
if len(mgr.candidates) == 0 {
mgr.candidates = nil