Don't update the dispatch header in KetSetEvent/KeResetEvent (threading issues)
This commit is contained in:
parent
5f79d8f97e
commit
4cbe219476
|
@ -456,11 +456,6 @@ DECLARE_XBOXKRNL_EXPORT(KeInitializeEvent,
|
||||||
|
|
||||||
dword_result_t KeSetEvent(pointer_t<X_KEVENT> event_ptr, dword_t increment,
|
dword_result_t KeSetEvent(pointer_t<X_KEVENT> event_ptr, dword_t increment,
|
||||||
dword_t wait) {
|
dword_t wait) {
|
||||||
// Update dispatch header.
|
|
||||||
xe::atomic_exchange(
|
|
||||||
xe::byte_swap<uint32_t>(1),
|
|
||||||
reinterpret_cast<uint32_t*>(&event_ptr->header.signal_state));
|
|
||||||
|
|
||||||
auto ev = XObject::GetNativeObject<XEvent>(kernel_state(), event_ptr);
|
auto ev = XObject::GetNativeObject<XEvent>(kernel_state(), event_ptr);
|
||||||
if (!ev) {
|
if (!ev) {
|
||||||
assert_always();
|
assert_always();
|
||||||
|
@ -485,10 +480,6 @@ dword_result_t KePulseEvent(pointer_t<X_KEVENT> event_ptr, dword_t increment,
|
||||||
DECLARE_XBOXKRNL_EXPORT(KePulseEvent, ExportTag::kImplemented);
|
DECLARE_XBOXKRNL_EXPORT(KePulseEvent, ExportTag::kImplemented);
|
||||||
|
|
||||||
dword_result_t KeResetEvent(pointer_t<X_KEVENT> event_ptr) {
|
dword_result_t KeResetEvent(pointer_t<X_KEVENT> event_ptr) {
|
||||||
// Update dispatch header.
|
|
||||||
xe::atomic_exchange(
|
|
||||||
0, reinterpret_cast<uint32_t*>(&event_ptr->header.signal_state));
|
|
||||||
|
|
||||||
auto ev = XObject::GetNativeObject<XEvent>(kernel_state(), event_ptr);
|
auto ev = XObject::GetNativeObject<XEvent>(kernel_state(), event_ptr);
|
||||||
if (!ev) {
|
if (!ev) {
|
||||||
assert_always();
|
assert_always();
|
||||||
|
@ -930,7 +921,7 @@ dword_result_t NtWaitForMultipleObjectsEx(dword_t count, lpdword_t handles,
|
||||||
assert_true(wait_type <= 1);
|
assert_true(wait_type <= 1);
|
||||||
X_STATUS result = X_STATUS_SUCCESS;
|
X_STATUS result = X_STATUS_SUCCESS;
|
||||||
|
|
||||||
std::vector<object_ref<XObject>> objects(count);
|
std::vector<object_ref<XObject>> objects;
|
||||||
for (uint32_t n = 0; n < count; n++) {
|
for (uint32_t n = 0; n < count; n++) {
|
||||||
uint32_t object_handle = handles[n];
|
uint32_t object_handle = handles[n];
|
||||||
auto object =
|
auto object =
|
||||||
|
|
Loading…
Reference in New Issue