99 ssize_t cancellationResult,
101 if (!matches(callback, parameter))
102 return CancellationDisposition::NoMatch;
105 const State observed = state();
106 if (observed == State::Active) {
107 if (transition(State::Active, State::PublicationClaimed)) {
108 fillClaim(claim, Reason::Cancelled, cancellationResult);
109 return CancellationDisposition::Claimed;
113 if (observed == State::Captured) {
115 return CancellationDisposition::Claimed;
118 if (observed == State::PublicationClaimed) {
119 fillClaim(claim, Reason::Natural, 0);
120 return CancellationDisposition::DrainPublished;
122 return CancellationDisposition::NoMatch;
135 const State observed = state();
136 if (observed == State::Active) {
137 if (transition(State::Active, State::PublicationClaimed)) {
138 fillClaim(claim, Reason::Teardown, cancellationResult);
143 if (observed == State::Captured)