aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/fuzzer/queue/queue.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/fuzzer/queue/queue.go')
-rw-r--r--pkg/fuzzer/queue/queue.go12
1 files changed, 10 insertions, 2 deletions
diff --git a/pkg/fuzzer/queue/queue.go b/pkg/fuzzer/queue/queue.go
index 58c9f1561..6e17225e2 100644
--- a/pkg/fuzzer/queue/queue.go
+++ b/pkg/fuzzer/queue/queue.go
@@ -7,6 +7,7 @@ import (
"bytes"
"context"
"encoding/gob"
+ "errors"
"fmt"
"math/rand"
"strings"
@@ -99,12 +100,14 @@ func (r *Request) Done(res *Result) {
close(r.done)
}
+var errContextAborted = errors.New("context closed while waiting the result")
+
// Wait() blocks until we have the result.
func (r *Request) Wait(ctx context.Context) *Result {
r.initChannel()
select {
case <-ctx.Done():
- return &Result{Status: ExecFailure}
+ return &Result{Status: ExecFailure, Err: errContextAborted}
case <-r.done:
return r.result
}
@@ -537,6 +540,8 @@ func (rq *RandomQueue) Next() *Request {
return item
}
+var errEvictedFromQueue = errors.New("evicted from the random queue")
+
func (rq *RandomQueue) Submit(req *Request) {
rq.mu.Lock()
defer rq.mu.Unlock()
@@ -545,7 +550,10 @@ func (rq *RandomQueue) Submit(req *Request) {
} else {
pos := rq.rnd.Intn(rq.maxSize + 1)
if pos < len(rq.queue) {
- rq.queue[pos].Done(&Result{Status: ExecFailure})
+ rq.queue[pos].Done(&Result{
+ Status: ExecFailure,
+ Err: errEvictedFromQueue,
+ })
rq.queue[pos] = req
}
}