forked from suyu/suyu
Merge pull request #2356 from lioncash/pair
kernel/{server_port, server_session}: Return pairs instead of tuples from pair creation functions
This commit is contained in:
commit
52ad5fa0e8
6 changed files with 15 additions and 18 deletions
|
@ -139,10 +139,8 @@ public:
|
||||||
context->AddDomainObject(std::move(iface));
|
context->AddDomainObject(std::move(iface));
|
||||||
} else {
|
} else {
|
||||||
auto& kernel = Core::System::GetInstance().Kernel();
|
auto& kernel = Core::System::GetInstance().Kernel();
|
||||||
auto sessions =
|
auto [server, client] =
|
||||||
Kernel::ServerSession::CreateSessionPair(kernel, iface->GetServiceName());
|
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);
|
iface->ClientConnected(server);
|
||||||
context->AddMoveObject(std::move(client));
|
context->AddMoveObject(std::move(client));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
#include <tuple>
|
|
||||||
|
|
||||||
#include "core/hle/kernel/client_port.h"
|
#include "core/hle/kernel/client_port.h"
|
||||||
#include "core/hle/kernel/client_session.h"
|
#include "core/hle/kernel/client_session.h"
|
||||||
#include "core/hle/kernel/errors.h"
|
#include "core/hle/kernel/errors.h"
|
||||||
|
@ -31,18 +29,18 @@ ResultVal<SharedPtr<ClientSession>> ClientPort::Connect() {
|
||||||
active_sessions++;
|
active_sessions++;
|
||||||
|
|
||||||
// Create a new session pair, let the created sessions inherit the parent port's HLE handler.
|
// 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()) {
|
if (server_port->HasHLEHandler()) {
|
||||||
server_port->GetHLEHandler()->ClientConnected(std::get<SharedPtr<ServerSession>>(sessions));
|
server_port->GetHLEHandler()->ClientConnected(server);
|
||||||
} else {
|
} else {
|
||||||
server_port->AppendPendingSession(std::get<SharedPtr<ServerSession>>(sessions));
|
server_port->AppendPendingSession(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wake the threads waiting on the ServerPort
|
// Wake the threads waiting on the ServerPort
|
||||||
server_port->WakeupAllWaitingThreads();
|
server_port->WakeupAllWaitingThreads();
|
||||||
|
|
||||||
return MakeResult(std::get<SharedPtr<ClientSession>>(sessions));
|
return MakeResult(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientPort::ConnectionClosed() {
|
void ClientPort::ConnectionClosed() {
|
||||||
|
|
|
@ -39,9 +39,8 @@ void ServerPort::Acquire(Thread* thread) {
|
||||||
ASSERT_MSG(!ShouldWait(thread), "object unavailable!");
|
ASSERT_MSG(!ShouldWait(thread), "object unavailable!");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> ServerPort::CreatePortPair(
|
ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions,
|
||||||
KernelCore& kernel, u32 max_sessions, std::string name) {
|
std::string name) {
|
||||||
|
|
||||||
SharedPtr<ServerPort> server_port(new ServerPort(kernel));
|
SharedPtr<ServerPort> server_port(new ServerPort(kernel));
|
||||||
SharedPtr<ClientPort> client_port(new ClientPort(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->max_sessions = max_sessions;
|
||||||
client_port->active_sessions = 0;
|
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
|
} // namespace Kernel
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <tuple>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
|
@ -23,6 +23,7 @@ class SessionRequestHandler;
|
||||||
class ServerPort final : public WaitObject {
|
class ServerPort final : public WaitObject {
|
||||||
public:
|
public:
|
||||||
using HLEHandler = std::shared_ptr<SessionRequestHandler>;
|
using HLEHandler = std::shared_ptr<SessionRequestHandler>;
|
||||||
|
using PortPair = std::pair<SharedPtr<ServerPort>, SharedPtr<ClientPort>>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a pair of ServerPort and an associated ClientPort.
|
* Creates a pair of ServerPort and an associated ClientPort.
|
||||||
|
@ -32,8 +33,8 @@ public:
|
||||||
* @param name Optional name of the ports
|
* @param name Optional name of the ports
|
||||||
* @return The created port tuple
|
* @return The created port tuple
|
||||||
*/
|
*/
|
||||||
static std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> CreatePortPair(
|
static PortPair CreatePortPair(KernelCore& kernel, u32 max_sessions,
|
||||||
KernelCore& kernel, u32 max_sessions, std::string name = "UnknownPort");
|
std::string name = "UnknownPort");
|
||||||
|
|
||||||
std::string GetTypeName() const override {
|
std::string GetTypeName() const override {
|
||||||
return "ServerPort";
|
return "ServerPort";
|
||||||
|
|
|
@ -204,6 +204,6 @@ ServerSession::SessionPair ServerSession::CreateSessionPair(KernelCore& kernel,
|
||||||
client_session->parent = parent;
|
client_session->parent = parent;
|
||||||
server_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
|
} // namespace Kernel
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
|
@ -58,7 +59,7 @@ public:
|
||||||
return parent.get();
|
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.
|
* Creates a pair of ServerSession and an associated ClientSession.
|
||||||
|
|
Loading…
Reference in a new issue