mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-23 09:51:57 -05:00
Kernel: Fix sys$select() not marking fd's after blocking was avoided
In case multiple file descriptors in the `fd_set` were already readable and/or writable when calling Thread::block<SelectBlocker>(), we would only mark the first fd in the output sets instead of all relevant fd's. The short-circuit code path when blocking isn't necessary must ensure that unblock flags are collected for all file descriptors, not just the first one encountered. Fixes #5795.
This commit is contained in:
parent
8cafdf8985
commit
a7b5a58509
1 changed files with 1 additions and 1 deletions
|
@ -385,7 +385,7 @@ void Thread::SelectBlocker::not_blocking(bool timeout_in_past)
|
|||
// Either the timeout was in the past or we didn't add all blockers
|
||||
VERIFY(timeout_in_past || !m_should_block);
|
||||
ScopedSpinLock lock(m_lock);
|
||||
if (!m_did_unblock) {
|
||||
if (!m_should_block || !m_did_unblock) {
|
||||
m_did_unblock = true;
|
||||
if (!timeout_in_past) {
|
||||
auto count = collect_unblocked_flags();
|
||||
|
|
Loading…
Add table
Reference in a new issue