mirror of
https://git.h3cjp.net/H3cJP/yuzu.git
synced 2024-12-18 16:56:19 +00:00
hle: kernel: hle_ipc: Remove SleepClientThread.
- This was kind of hacky, and no longer is necessary with service threads.
This commit is contained in:
parent
87d6588cb5
commit
5d4715cc6a
|
@ -46,43 +46,6 @@ void SessionRequestHandler::ClientDisconnected(
|
||||||
boost::range::remove_erase(connected_sessions, server_session);
|
boost::range::remove_erase(connected_sessions, server_session);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<WritableEvent> HLERequestContext::SleepClientThread(
|
|
||||||
const std::string& reason, u64 timeout, WakeupCallback&& callback,
|
|
||||||
std::shared_ptr<WritableEvent> writable_event) {
|
|
||||||
// Put the client thread to sleep until the wait event is signaled or the timeout expires.
|
|
||||||
|
|
||||||
if (!writable_event) {
|
|
||||||
// Create event if not provided
|
|
||||||
const auto pair = WritableEvent::CreateEventPair(kernel, "HLE Pause Event: " + reason);
|
|
||||||
writable_event = pair.writable;
|
|
||||||
}
|
|
||||||
|
|
||||||
Handle event_handle = InvalidHandle;
|
|
||||||
{
|
|
||||||
KScopedSchedulerLockAndSleep lock(kernel, event_handle, thread.get(), timeout);
|
|
||||||
thread->SetHLECallback(
|
|
||||||
[context = *this, callback](std::shared_ptr<Thread> thread) mutable -> bool {
|
|
||||||
ThreadWakeupReason reason = thread->GetSignalingResult() == RESULT_TIMEOUT
|
|
||||||
? ThreadWakeupReason::Timeout
|
|
||||||
: ThreadWakeupReason::Signal;
|
|
||||||
callback(thread, context, reason);
|
|
||||||
context.WriteToOutgoingCommandBuffer(*thread);
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
const auto readable_event{writable_event->GetReadableEvent()};
|
|
||||||
writable_event->Clear();
|
|
||||||
thread->SetHLESyncObject(readable_event.get());
|
|
||||||
thread->SetStatus(ThreadStatus::WaitHLEEvent);
|
|
||||||
thread->SetSynchronizationResults(nullptr, RESULT_TIMEOUT);
|
|
||||||
readable_event->AddWaitingThread(thread);
|
|
||||||
}
|
|
||||||
thread->SetHLETimeEvent(event_handle);
|
|
||||||
|
|
||||||
is_thread_waiting = true;
|
|
||||||
|
|
||||||
return writable_event;
|
|
||||||
}
|
|
||||||
|
|
||||||
HLERequestContext::HLERequestContext(KernelCore& kernel, Core::Memory::Memory& memory,
|
HLERequestContext::HLERequestContext(KernelCore& kernel, Core::Memory::Memory& memory,
|
||||||
std::shared_ptr<ServerSession> server_session,
|
std::shared_ptr<ServerSession> server_session,
|
||||||
std::shared_ptr<Thread> thread)
|
std::shared_ptr<Thread> thread)
|
||||||
|
|
|
@ -129,23 +129,6 @@ public:
|
||||||
using WakeupCallback = std::function<void(
|
using WakeupCallback = std::function<void(
|
||||||
std::shared_ptr<Thread> thread, HLERequestContext& context, ThreadWakeupReason reason)>;
|
std::shared_ptr<Thread> thread, HLERequestContext& context, ThreadWakeupReason reason)>;
|
||||||
|
|
||||||
/**
|
|
||||||
* Puts the specified guest thread to sleep until the returned event is signaled or until the
|
|
||||||
* specified timeout expires.
|
|
||||||
* @param reason Reason for pausing the thread, to be used for debugging purposes.
|
|
||||||
* @param timeout Timeout in nanoseconds after which the thread will be awoken and the callback
|
|
||||||
* invoked with a Timeout reason.
|
|
||||||
* @param callback Callback to be invoked when the thread is resumed. This callback must write
|
|
||||||
* the entire command response once again, regardless of the state of it before this function
|
|
||||||
* was called.
|
|
||||||
* @param writable_event Event to use to wake up the thread. If unspecified, an event will be
|
|
||||||
* created.
|
|
||||||
* @returns Event that when signaled will resume the thread and call the callback function.
|
|
||||||
*/
|
|
||||||
std::shared_ptr<WritableEvent> SleepClientThread(
|
|
||||||
const std::string& reason, u64 timeout, WakeupCallback&& callback,
|
|
||||||
std::shared_ptr<WritableEvent> writable_event = nullptr);
|
|
||||||
|
|
||||||
/// Populates this context with data from the requesting process/thread.
|
/// Populates this context with data from the requesting process/thread.
|
||||||
ResultCode PopulateFromIncomingCommandBuffer(const HandleTable& handle_table,
|
ResultCode PopulateFromIncomingCommandBuffer(const HandleTable& handle_table,
|
||||||
u32_le* src_cmdbuf);
|
u32_le* src_cmdbuf);
|
||||||
|
|
Loading…
Reference in a new issue