From c95ed2849686a49c978230124e58efcc66dea5d2 Mon Sep 17 00:00:00 2001 From: vyzo Date: Sat, 13 Jan 2018 18:34:00 +0200 Subject: [PATCH] add validation context for cancelation on aborts --- floodsub.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/floodsub.go b/floodsub.go index 68341e3..3ecfb33 100644 --- a/floodsub.go +++ b/floodsub.go @@ -377,6 +377,9 @@ func (p *PubSub) pushMsg(subs []*Subscription, src peer.ID, msg *Message) { // validate performs validation and only sends the message if all validators succeed func (p *PubSub) validate(subs []*Subscription, src peer.ID, msg *Message) { + ctx, cancel := context.WithCancel(p.ctx) + defer cancel() + results := make([]chan bool, 0, len(subs)) throttle := false @@ -391,10 +394,10 @@ loop: select { case sub.validateThrottle <- struct{}{}: - go func(sub *Subscription, msg *Message, rch chan bool) { - rch <- sub.validateMsg(p.ctx, msg) + go func(sub *Subscription, rch chan bool) { + rch <- sub.validateMsg(ctx, msg) <-sub.validateThrottle - }(sub, msg, rch) + }(sub, rch) default: log.Debugf("validation throttled for topic %s", sub.topic)