When we broadcast a message to a number of members and wait for the responses, if P is suspected or P leaves the cluster, then we'll call Rsp.setValue(null). The setValue() method sets Rsp.received to true, which is unfortunate as we didn't really receive a response.
This was changed, the new semantics are:
- Every response is initially not received, not suspected, and the value is null
- On reception of a value or exception, we set received to true
- On a suspicion, we set received=false and suspected=true, but do not null the value (or exception)