packet_stream: reset wakeup_needed on wakeup()

The wakeup call only emits a single signal as it assumed both are
handled by the same signal handler. However, the original implementation
did not reset the wakeup_needed variable properly.

genodelabs/genode#4555
This commit is contained in:
Johannes Schlatow 2022-07-07 15:14:56 +02:00 committed by Christian Helmuth
parent 6a308dacd7
commit 3ea910bf83

View File

@ -444,13 +444,13 @@ class Genode::Packet_descriptor_receiver
return packet; return packet;
} }
bool rx_wakeup() bool rx_wakeup(bool omit_signal)
{ {
Genode::Mutex::Guard mutex_guard(_rx_queue_mutex); Genode::Mutex::Guard mutex_guard(_rx_queue_mutex);
bool signal_submitted = false; bool signal_submitted = false;
if (_rx_wakeup_needed) { if (_rx_wakeup_needed && !omit_signal) {
_tx_ready.submit(); _tx_ready.submit();
signal_submitted = true; signal_submitted = true;
} }
@ -778,7 +778,7 @@ class Genode::Packet_stream_source : private Packet_stream_base
void wakeup() void wakeup()
{ {
/* submit only one signal, prefer submit transmitter over ack receiver */ /* submit only one signal, prefer submit transmitter over ack receiver */
_submit_transmitter.tx_wakeup() || _ack_receiver.rx_wakeup(); _ack_receiver.rx_wakeup(_submit_transmitter.tx_wakeup());
} }
/** /**
@ -937,7 +937,7 @@ class Genode::Packet_stream_sink : private Packet_stream_base
void wakeup() void wakeup()
{ {
/* submit only one signal, prefer ack_avail signal over ready_to_submit */ /* submit only one signal, prefer ack_avail signal over ready_to_submit */
_ack_transmitter.tx_wakeup() || _submit_receiver.rx_wakeup(); _submit_receiver.rx_wakeup(_ack_transmitter.tx_wakeup());
} }
/** /**