usb_drv: prevent recursive signal dispatch

Fixes #649.
This commit is contained in:
Christian Prochaska 2013-02-05 13:53:23 +00:00 committed by Norman Feske
parent 519bed419d
commit dc0ac78b34
1 changed files with 7 additions and 3 deletions

View File

@ -178,12 +178,13 @@ namespace Nic {
if (!_tx_sink->ready_to_ack()) {
_wait_event(_tx_sink->ready_to_ack());
}
/* acknowledge to client */
_tx_sink->acknowledge_packet(packet);
/* check if we received any signals (don't block) */
if ((tx_cnt % 20) == 0)
Service_handler::s()->check_signal(false);
/* it's cooperative scheduling - be nice */
if (tx_cnt == 20)
break;
}
/* sumbit last skb */
@ -197,6 +198,9 @@ namespace Nic {
/* release acknowledged packets */
_rx_ack(false);
if (_tx_sink->packet_avail())
Signal_transmitter(_tx.sigh_packet_avail()).submit();
}
void _rx_ack(bool block = true)