From 72b440df7d845f06b6a64e53184e5cfcde87304a Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 16 Jul 2024 17:59:03 -0400 Subject: [PATCH] kernel/events: Fix wait_for_objects. In the preceding commit, I missed that "events" was cleared inside the select loop, making a use later on useless. Now we don't clear it in the loop, but wait till the end to do so. (Considering we return without clearing it in case of out-of-memory or other problems, this may not even be necessary, but it at least preserves existing behavior.) --- src/system/kernel/events/wait_for_objects.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/events/wait_for_objects.cpp b/src/system/kernel/events/wait_for_objects.cpp index 549516bad5..d142a61931 100644 --- a/src/system/kernel/events/wait_for_objects.cpp +++ b/src/system/kernel/events/wait_for_objects.cpp @@ -682,7 +682,6 @@ common_wait_for_objects(object_wait_info* infos, int numInfos, uint32 flags, infos[i].events |= B_EVENT_INVALID | B_EVENT_ERROR | B_EVENT_DISCONNECTED; sync->set[i].selected_events = infos[i].events; sync->set[i].events = 0; - infos[i].events = 0; if (select_object(type, object, sync->set + i, kernel) != B_OK) { // If the object returned events as well as an error, ignore the error. @@ -705,7 +704,6 @@ common_wait_for_objects(object_wait_info* infos, int numInfos, uint32 flags, for (int i = 0; i < numInfos; i++) { uint16 type = infos[i].type; - if ((infos[i].events & B_EVENT_INVALID) == 0) deselect_object(type, infos[i].object, sync->set + i, kernel); } @@ -722,6 +720,8 @@ common_wait_for_objects(object_wait_info* infos, int numInfos, uint32 flags, } else { // B_INTERRUPTED, B_TIMED_OUT, and B_WOULD_BLOCK count = status; + for (int i = 0; i < numInfos; i++) + infos[i].events = 0; } put_select_sync(sync);