[Kernel/IO] IoCompletion: Removed !wait_ticks check
- Marked IoCompletion as frequently used functions - Added correct behaviour to wait_ticks 0
This commit is contained in:
parent
771f8fb292
commit
14eeb94326
|
@ -458,7 +458,8 @@ dword_result_t NtSetIoCompletion(dword_t handle, dword_t key_context,
|
||||||
port->QueueNotification(notification);
|
port->QueueNotification(notification);
|
||||||
return X_STATUS_SUCCESS;
|
return X_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
DECLARE_XBOXKRNL_EXPORT1(NtSetIoCompletion, kFileSystem, kImplemented);
|
DECLARE_XBOXKRNL_EXPORT2(NtSetIoCompletion, kFileSystem, kImplemented,
|
||||||
|
kHighFrequency);
|
||||||
|
|
||||||
// Dequeues a packet from the completion port.
|
// Dequeues a packet from the completion port.
|
||||||
dword_result_t NtRemoveIoCompletion(
|
dword_result_t NtRemoveIoCompletion(
|
||||||
|
@ -473,7 +474,9 @@ dword_result_t NtRemoveIoCompletion(
|
||||||
status = X_STATUS_INVALID_HANDLE;
|
status = X_STATUS_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t timeout_ticks = timeout ? static_cast<uint32_t>(*timeout) : 0u;
|
uint64_t timeout_ticks =
|
||||||
|
timeout ? static_cast<uint32_t>(*timeout)
|
||||||
|
: static_cast<uint64_t>(std::numeric_limits<int64_t>::min());
|
||||||
XIOCompletion::IONotification notification;
|
XIOCompletion::IONotification notification;
|
||||||
if (port->WaitForNotification(timeout_ticks, ¬ification)) {
|
if (port->WaitForNotification(timeout_ticks, ¬ification)) {
|
||||||
if (key_context) {
|
if (key_context) {
|
||||||
|
@ -493,7 +496,8 @@ dword_result_t NtRemoveIoCompletion(
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
DECLARE_XBOXKRNL_EXPORT1(NtRemoveIoCompletion, kFileSystem, kImplemented);
|
DECLARE_XBOXKRNL_EXPORT2(NtRemoveIoCompletion, kFileSystem, kImplemented,
|
||||||
|
kHighFrequency);
|
||||||
|
|
||||||
dword_result_t NtQueryFullAttributesFile(
|
dword_result_t NtQueryFullAttributesFile(
|
||||||
pointer_t<X_OBJECT_ATTRIBUTES> obj_attribs,
|
pointer_t<X_OBJECT_ATTRIBUTES> obj_attribs,
|
||||||
|
|
|
@ -30,7 +30,7 @@ bool XIOCompletion::WaitForNotification(uint64_t wait_ticks,
|
||||||
IONotification* notify) {
|
IONotification* notify) {
|
||||||
auto ms = std::chrono::milliseconds(TimeoutTicksToMs(wait_ticks));
|
auto ms = std::chrono::milliseconds(TimeoutTicksToMs(wait_ticks));
|
||||||
auto res = threading::Wait(notification_semaphore_.get(), false, ms);
|
auto res = threading::Wait(notification_semaphore_.get(), false, ms);
|
||||||
if (res == threading::WaitResult::kSuccess || !wait_ticks) {
|
if (res == threading::WaitResult::kSuccess) {
|
||||||
std::unique_lock<std::mutex> lock(notification_lock_);
|
std::unique_lock<std::mutex> lock(notification_lock_);
|
||||||
assert_false(notifications_.empty());
|
assert_false(notifications_.empty());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue