Repository navigation
fix(libkernel): report level-triggered equeue events once per wait - #3489
Merged
adriadam10 merged 2 commits intoOct 11, 2026
Merged
Conversation
A user event added with sceKernelAddUserEvent stays triggered until it is deleted. The collection loop kept re-emitting it until the caller's event buffer was full, so a wait with num > 1 returned the same event num times. Like kevent, each event is now reported at most once per call; distinct queued completions of one event are still delivered in order. (cherry picked from commit db28ebb)
…vents Document the level-triggered user event semantics of sceKernelWaitEqueue in TechnicalDebt. (cherry picked from commit db79bee)
9 tasks done
Collaborator
|
Checked the single-report-per-wait behaviour against FreeBSD |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Carry Hussein Kadhim's two commits from #3115, preserving the original authorship. A level-triggered user event now appears at most once in each
sceKernelWaitEqueueresult, while remaining ready for the next wait. The shared collector also preserves distinct queued AMPR completions and honors the caller's event count.Rebasing the source branch onto current
mainrequired resolving itsEqueue.cppoverlap with merged #1091. This change keeps #1091's socket polling and descriptor-wait behavior while sharing the event collection logic between polling and blocking paths.Tested
Linux x86-64, GCC 12.2, Release,
BUILD_TESTING=ON: built the equeue, socket-event, AMPR marker/thread, UDP and TCP tests. The following six CTests passed three consecutive runs each:guest_equeue_events,guest_socket_events,guest_ampr_markers,guest_ampr_threads,guest_udp,guest_tcp.python3 tools/check_conventions.py --base upstream/mainandgit diff --checkpassed. No Windows build or console run was performed here. The source issue reports a Windows 11 test run before the rebase onto currentmain.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository (attach them to this PR)