pgraph: Move the quiesce done indicator to avoid deadlock

This avoids a deadlock on resource failure when retry==0. Without this
we would never exit. This adds a test in too!
This commit is contained in:
James Shubin
2017-03-12 13:47:22 -04:00
parent 18c4e39ea3
commit 91af528ff8
3 changed files with 26 additions and 2 deletions

View File

@@ -385,9 +385,9 @@ Loop:
// catch invalid rates
if v.Meta().Burst == 0 && !(v.Meta().Limit == rate.Inf) { // blocked
e := fmt.Errorf("%s[%s]: Permanently limited (rate != Inf, burst: 0)", v.Kind(), v.GetName())
v.SendEvent(event.EventExit, &SentinelErr{e})
ev.ACK() // ready for next message
v.Res.QuiesceGroup().Done()
v.SendEvent(event.EventExit, &SentinelErr{e})
continue
}
@@ -423,8 +423,8 @@ Loop:
log.Printf("%s[%s]: CheckApply errored: %v", v.Kind(), v.GetName(), e)
if retry == 0 {
// wrap the error in the sentinel
v.Res.QuiesceGroup().Done() // before the Wait that happens in SendEvent!
v.SendEvent(event.EventExit, &SentinelErr{e})
v.Res.QuiesceGroup().Done()
return
}
if retry > 0 { // don't decrement the -1