sfxge(4): ensure EvQ poll stops when abort is requested
If an event handler requested an abort, only the inner loop was guarenteed to be broken out of - the outer loop could continue if total == batch. Fix this by poisoning batch to ensure it is different to total. Submitted by: Mark Spender <mspender at solarflare.com> Sponsored by: Solarflare Communications, Inc. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D18287
This commit is contained in:
parent
c6831b0bcb
commit
b162acfe52
@ -509,6 +509,14 @@ efx_ev_qpoll(
|
||||
if (should_abort) {
|
||||
/* Ignore subsequent events */
|
||||
total = index + 1;
|
||||
|
||||
/*
|
||||
* Poison batch to ensure the outer
|
||||
* loop is broken out of.
|
||||
*/
|
||||
EFSYS_ASSERT(batch <= EFX_EV_BATCH);
|
||||
batch += (EFX_EV_BATCH << 1);
|
||||
EFSYS_ASSERT(total != batch);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user