|
|
@ -44,12 +44,7 @@ ResultVal<std::shared_ptr<ServerSession>> ServerSession::Create(KernelCore& kern |
|
|
|
|
|
|
|
|
bool ServerSession::IsSignaled() const { |
|
|
bool ServerSession::IsSignaled() const { |
|
|
// Closed sessions should never wait, an error will be returned from svcReplyAndReceive.
|
|
|
// Closed sessions should never wait, an error will be returned from svcReplyAndReceive.
|
|
|
if (!parent->Client()) { |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Wait if we have no pending requests, or if we're currently handling a request.
|
|
|
|
|
|
return !pending_requesting_threads.empty() && currently_handling == nullptr; |
|
|
|
|
|
|
|
|
return !parent->Client(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void ServerSession::ClientDisconnected() { |
|
|
void ServerSession::ClientDisconnected() { |
|
|
@ -62,11 +57,6 @@ void ServerSession::ClientDisconnected() { |
|
|
// invalidated (set to null).
|
|
|
// invalidated (set to null).
|
|
|
handler->ClientDisconnected(SharedFrom(this)); |
|
|
handler->ClientDisconnected(SharedFrom(this)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Clean up the list of client threads with pending requests, they are unneeded now that the
|
|
|
|
|
|
// client endpoint is closed.
|
|
|
|
|
|
pending_requesting_threads.clear(); |
|
|
|
|
|
currently_handling = nullptr; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void ServerSession::AppendDomainRequestHandler(std::shared_ptr<SessionRequestHandler> handler) { |
|
|
void ServerSession::AppendDomainRequestHandler(std::shared_ptr<SessionRequestHandler> handler) { |
|
|
@ -116,11 +106,9 @@ ResultCode ServerSession::HandleDomainSyncRequest(Kernel::HLERequestContext& con |
|
|
return RESULT_SUCCESS; |
|
|
return RESULT_SUCCESS; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ResultCode ServerSession::QueueSyncRequest(std::shared_ptr<KThread> thread, |
|
|
|
|
|
Core::Memory::Memory& memory) { |
|
|
|
|
|
|
|
|
ResultCode ServerSession::QueueSyncRequest(KThread* thread, Core::Memory::Memory& memory) { |
|
|
u32* cmd_buf{reinterpret_cast<u32*>(memory.GetPointer(thread->GetTLSAddress()))}; |
|
|
u32* cmd_buf{reinterpret_cast<u32*>(memory.GetPointer(thread->GetTLSAddress()))}; |
|
|
auto context = |
|
|
|
|
|
std::make_shared<HLERequestContext>(kernel, memory, SharedFrom(this), std::move(thread)); |
|
|
|
|
|
|
|
|
auto context = std::make_shared<HLERequestContext>(kernel, memory, SharedFrom(this), thread); |
|
|
|
|
|
|
|
|
context->PopulateFromIncomingCommandBuffer(kernel.CurrentProcess()->GetHandleTable(), cmd_buf); |
|
|
context->PopulateFromIncomingCommandBuffer(kernel.CurrentProcess()->GetHandleTable(), cmd_buf); |
|
|
|
|
|
|
|
|
@ -161,10 +149,9 @@ ResultCode ServerSession::CompleteSyncRequest(HLERequestContext& context) { |
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ResultCode ServerSession::HandleSyncRequest(std::shared_ptr<KThread> thread, |
|
|
|
|
|
Core::Memory::Memory& memory, |
|
|
|
|
|
|
|
|
ResultCode ServerSession::HandleSyncRequest(KThread* thread, Core::Memory::Memory& memory, |
|
|
Core::Timing::CoreTiming& core_timing) { |
|
|
Core::Timing::CoreTiming& core_timing) { |
|
|
return QueueSyncRequest(std::move(thread), memory); |
|
|
|
|
|
|
|
|
return QueueSyncRequest(thread, memory); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} // namespace Kernel
|
|
|
} // namespace Kernel
|