Browse Source
Merge pull request #2356 from lioncash/pair
kernel/{server_port, server_session}: Return pairs instead of tuples from pair creation functions
pull/15/merge
bunnei
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with
15 additions and
18 deletions
-
src/core/hle/ipc_helpers.h
-
src/core/hle/kernel/client_port.cpp
-
src/core/hle/kernel/server_port.cpp
-
src/core/hle/kernel/server_port.h
-
src/core/hle/kernel/server_session.cpp
-
src/core/hle/kernel/server_session.h
|
|
|
@ -139,10 +139,8 @@ public: |
|
|
|
context->AddDomainObject(std::move(iface)); |
|
|
|
} else { |
|
|
|
auto& kernel = Core::System::GetInstance().Kernel(); |
|
|
|
auto sessions = |
|
|
|
auto [server, client] = |
|
|
|
Kernel::ServerSession::CreateSessionPair(kernel, iface->GetServiceName()); |
|
|
|
auto server = std::get<Kernel::SharedPtr<Kernel::ServerSession>>(sessions); |
|
|
|
auto client = std::get<Kernel::SharedPtr<Kernel::ClientSession>>(sessions); |
|
|
|
iface->ClientConnected(server); |
|
|
|
context->AddMoveObject(std::move(client)); |
|
|
|
} |
|
|
|
|
|
|
|
@ -2,8 +2,6 @@ |
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <tuple>
|
|
|
|
|
|
|
|
#include "core/hle/kernel/client_port.h"
|
|
|
|
#include "core/hle/kernel/client_session.h"
|
|
|
|
#include "core/hle/kernel/errors.h"
|
|
|
|
@ -31,18 +29,18 @@ ResultVal<SharedPtr<ClientSession>> ClientPort::Connect() { |
|
|
|
active_sessions++; |
|
|
|
|
|
|
|
// Create a new session pair, let the created sessions inherit the parent port's HLE handler.
|
|
|
|
auto sessions = ServerSession::CreateSessionPair(kernel, server_port->GetName(), this); |
|
|
|
auto [server, client] = ServerSession::CreateSessionPair(kernel, server_port->GetName(), this); |
|
|
|
|
|
|
|
if (server_port->HasHLEHandler()) { |
|
|
|
server_port->GetHLEHandler()->ClientConnected(std::get<SharedPtr<ServerSession>>(sessions)); |
|
|
|
server_port->GetHLEHandler()->ClientConnected(server); |
|
|
|
} else { |
|
|
|
server_port->AppendPendingSession(std::get<SharedPtr<ServerSession>>(sessions)); |
|
|
|
server_port->AppendPendingSession(server); |
|
|
|
} |
|
|
|
|
|
|
|
// Wake the threads waiting on the ServerPort
|
|
|
|
server_port->WakeupAllWaitingThreads(); |
|
|
|
|
|
|
|
return MakeResult(std::get<SharedPtr<ClientSession>>(sessions)); |
|
|
|
return MakeResult(client); |
|
|
|
} |
|
|
|
|
|
|
|
void ClientPort::ConnectionClosed() { |
|
|
|
|
|
|
|
@ -39,9 +39,8 @@ void ServerPort::Acquire(Thread* thread) { |
|
|
|
ASSERT_MSG(!ShouldWait(thread), "object unavailable!"); |
|
|
|
} |
|
|
|
|
|
|
|
std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> ServerPort::CreatePortPair( |
|
|
|
KernelCore& kernel, u32 max_sessions, std::string name) { |
|
|
|
|
|
|
|
ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions, |
|
|
|
std::string name) { |
|
|
|
SharedPtr<ServerPort> server_port(new ServerPort(kernel)); |
|
|
|
SharedPtr<ClientPort> client_port(new ClientPort(kernel)); |
|
|
|
|
|
|
|
@ -51,7 +50,7 @@ std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> ServerPort::CreatePortP |
|
|
|
client_port->max_sessions = max_sessions; |
|
|
|
client_port->active_sessions = 0; |
|
|
|
|
|
|
|
return std::make_tuple(std::move(server_port), std::move(client_port)); |
|
|
|
return std::make_pair(std::move(server_port), std::move(client_port)); |
|
|
|
} |
|
|
|
|
|
|
|
} // namespace Kernel
|
|
|
|
@ -6,7 +6,7 @@ |
|
|
|
|
|
|
|
#include <memory> |
|
|
|
#include <string> |
|
|
|
#include <tuple> |
|
|
|
#include <utility> |
|
|
|
#include <vector> |
|
|
|
#include "common/common_types.h" |
|
|
|
#include "core/hle/kernel/object.h" |
|
|
|
@ -23,6 +23,7 @@ class SessionRequestHandler; |
|
|
|
class ServerPort final : public WaitObject { |
|
|
|
public: |
|
|
|
using HLEHandler = std::shared_ptr<SessionRequestHandler>; |
|
|
|
using PortPair = std::pair<SharedPtr<ServerPort>, SharedPtr<ClientPort>>; |
|
|
|
|
|
|
|
/** |
|
|
|
* Creates a pair of ServerPort and an associated ClientPort. |
|
|
|
@ -32,8 +33,8 @@ public: |
|
|
|
* @param name Optional name of the ports |
|
|
|
* @return The created port tuple |
|
|
|
*/ |
|
|
|
static std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> CreatePortPair( |
|
|
|
KernelCore& kernel, u32 max_sessions, std::string name = "UnknownPort"); |
|
|
|
static PortPair CreatePortPair(KernelCore& kernel, u32 max_sessions, |
|
|
|
std::string name = "UnknownPort"); |
|
|
|
|
|
|
|
std::string GetTypeName() const override { |
|
|
|
return "ServerPort"; |
|
|
|
|
|
|
|
@ -204,6 +204,6 @@ ServerSession::SessionPair ServerSession::CreateSessionPair(KernelCore& kernel, |
|
|
|
client_session->parent = parent; |
|
|
|
server_session->parent = parent; |
|
|
|
|
|
|
|
return std::make_tuple(std::move(server_session), std::move(client_session)); |
|
|
|
return std::make_pair(std::move(server_session), std::move(client_session)); |
|
|
|
} |
|
|
|
} // namespace Kernel
|
|
|
|
@ -6,6 +6,7 @@ |
|
|
|
|
|
|
|
#include <memory> |
|
|
|
#include <string> |
|
|
|
#include <utility> |
|
|
|
#include <vector> |
|
|
|
|
|
|
|
#include "core/hle/kernel/object.h" |
|
|
|
@ -58,7 +59,7 @@ public: |
|
|
|
return parent.get(); |
|
|
|
} |
|
|
|
|
|
|
|
using SessionPair = std::tuple<SharedPtr<ServerSession>, SharedPtr<ClientSession>>; |
|
|
|
using SessionPair = std::pair<SharedPtr<ServerSession>, SharedPtr<ClientSession>>; |
|
|
|
|
|
|
|
/** |
|
|
|
* Creates a pair of ServerSession and an associated ClientSession. |
|
|
|
|