fix/kpn-wedging-audit #3
@@ -446,35 +446,6 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parked from a previous firing: retry that value before touching the
|
|
||||||
// inputs. Returning here releases the worker — the channel's space
|
|
||||||
// callback re-submits this node once the consumer drains a slot.
|
|
||||||
if constexpr (!std::is_void_v<return_raw>) {
|
|
||||||
if (pending_) {
|
|
||||||
push_outputs(std::move(*pending_), std::make_index_sequence<output_count>{});
|
|
||||||
release_and_recheck();
|
|
||||||
if (pending_) {
|
|
||||||
// Close the lost-wakeup race: a space_callback that fired
|
|
||||||
// between the failed push and clearing queued_ was
|
|
||||||
// swallowed, and nothing else will wake this node. Re-check
|
|
||||||
// now that the flag is down.
|
|
||||||
if (outputs_have_space(std::make_index_sequence<output_count>{}))
|
|
||||||
try_submit(0.5f);
|
|
||||||
return; // parked
|
|
||||||
}
|
|
||||||
// Drained: resume normal firing, resubmitting exactly the way
|
|
||||||
// the normal tail below does. An unconditional try_submit here
|
|
||||||
// would fire a node whose inputs are empty, and pop_inputs
|
|
||||||
// reports an empty channel as ChannelClosedError — which this
|
|
||||||
// node treats as "upstream finished" and self-stops on. That
|
|
||||||
// is a live node killing itself purely because it was woken by
|
|
||||||
// *output* space rather than by input arrival.
|
|
||||||
if constexpr (input_count == 0) try_submit(0.5f);
|
|
||||||
else on_input_ready();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Woken by output space rather than by input arrival, with nothing
|
// Woken by output space rather than by input arrival, with nothing
|
||||||
// parked left to flush: there is no work to do. Falling through would
|
// parked left to flush: there is no work to do. Falling through would
|
||||||
// read an empty channel, and pop_one reports empty as
|
// read an empty channel, and pop_one reports empty as
|
||||||
|
|||||||
Reference in New Issue
Block a user