On Mon Sep 15 18:31:54 2025 +0000, Elizabeth Figura wrote:
I don't really see why that's necessary either? It seems to me we should just add a quick test that it behaves like NtSetEvent(), and call NtSetEvent() from it if so.
Thanks for reviewing, guidance, and bearing with my confusion while deep dive these parts of WINE for the first time.
I have another pending patch that calls NetSetEvent from NtSetEventBoostPriority but the condition under which NetSetEvent should be called is still unclear to me.
Looking deeper at Xenia Canary SetBoostPriority() calls:
https://github.com/xenia-canary/xenia-canary/blob/canary_experimental/src/xe...:
`// SetEvent, but if there is a waiter we immediately transfer execution to it`
This comment seems inline with @mzent assumptions that threads awaiting the event are made immediately runnable.
APU audio decoding and GPU write pointer updates seem to be the two major use cases by Xenia Canary:
https://github.com/xenia-canary/xenia-canary/blob/canary_experimental/src/xe...
``` if (r >= XmaRegister::Context0Kick && r <= XmaRegister::Context9Kick) { // Context kick command. // This will kick off the given hardware contexts. // Basically, this kicks the SPU and says "hey, decode that audio!" // XMAEnableContext
work_event_->SetBoostPriority(); ```
https://github.com/xenia-canary/xenia-canary/blob/canary_experimental/src/xe...
``` void CommandProcessor::UpdateWritePointer(uint32_t value) { XE_UNLIKELY_IF(cvars::log_ringbuffer_kickoff_initiator_bts) { LogKickoffInitator(value); } write_ptr_index_ = value; write_ptr_index_event_->SetBoostPriority(); } ```