#21446: Completion events must not be swallowed if chasing

This commit is contained in:
Endre Sándor Varga 2016-09-12 16:50:02 +02:00
parent 4821fb158e
commit b2f0ca6750
4 changed files with 1329 additions and 1169 deletions

View file

@ -842,6 +842,12 @@ final class GraphInterpreter(
connection.portState = currentState | (OutClosed | InFailed)
connection.slot = Failed(ex, connection.slot)
if ((currentState & (Pulling | Pushing)) == 0) enqueue(connection)
else if (chasedPush eq connection) {
// Abort chasing so Failure is not lost (chasing does NOT decode the event but assumes it to be a PUSH
// but we just changed the event!)
chasedPush = NoEvent
enqueue(connection)
}
}
if ((currentState & OutClosed) == 0) completeConnection(connection.outOwnerId)
}
@ -853,6 +859,12 @@ final class GraphInterpreter(
if ((currentState & OutClosed) == 0) {
connection.slot = Empty
if ((currentState & (Pulling | Pushing | InClosed)) == 0) enqueue(connection)
else if (chasedPull eq connection) {
// Abort chasing so Cancel is not lost (chasing does NOT decode the event but assumes it to be a PULL
// but we just changed the event!)
chasedPull = NoEvent
enqueue(connection)
}
}
if ((currentState & InClosed) == 0) completeConnection(connection.inOwnerId)
}