diff options
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/k_client_port.cpp | 4 | ||||
-rw-r--r-- | src/core/hle/kernel/k_client_port.h | 14 | ||||
-rw-r--r-- | src/core/hle/kernel/k_server_port.cpp (renamed from src/core/hle/kernel/server_port.cpp) | 30 | ||||
-rw-r--r-- | src/core/hle/kernel/k_server_port.h (renamed from src/core/hle/kernel/server_port.h) | 42 |
4 files changed, 53 insertions, 37 deletions
diff --git a/src/core/hle/kernel/k_client_port.cpp b/src/core/hle/kernel/k_client_port.cpp index 15bf0d4fc..00e1bbc59 100644 --- a/src/core/hle/kernel/k_client_port.cpp +++ b/src/core/hle/kernel/k_client_port.cpp @@ -4,9 +4,9 @@ #include "core/hle/kernel/hle_ipc.h" #include "core/hle/kernel/k_client_port.h" +#include "core/hle/kernel/k_server_port.h" #include "core/hle/kernel/k_session.h" #include "core/hle/kernel/object.h" -#include "core/hle/kernel/server_port.h" #include "core/hle/kernel/svc_results.h" namespace Kernel { @@ -19,7 +19,7 @@ void KClientPort::Initialize(s32 max_sessions_, std::string&& name_) { name = std::move(name_); } -std::shared_ptr<ServerPort> KClientPort::GetServerPort() const { +KServerPort* KClientPort::GetServerPort() const { return server_port; } diff --git a/src/core/hle/kernel/k_client_port.h b/src/core/hle/kernel/k_client_port.h index 04ee2d664..60dea4763 100644 --- a/src/core/hle/kernel/k_client_port.h +++ b/src/core/hle/kernel/k_client_port.h @@ -15,7 +15,7 @@ namespace Kernel { class KClientSession; class KernelCore; -class ServerPort; +class KServerPort; class KClientPort final : public KSynchronizationObject { KERNEL_AUTOOBJECT_TRAITS(KClientPort, KSynchronizationObject); @@ -24,11 +24,11 @@ public: explicit KClientPort(KernelCore& kernel); virtual ~KClientPort() override; - friend class ServerPort; + friend class KServerPort; void Initialize(s32 max_sessions_, std::string&& name_); - std::shared_ptr<ServerPort> GetServerPort() const; + KServerPort* GetServerPort() const; /** * Creates a new Session pair, adds the created ServerSession to the associated ServerPort's @@ -63,10 +63,10 @@ public: } private: - std::shared_ptr<ServerPort> server_port; ///< ServerPort associated with this client port. - s32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have - std::atomic<s32> num_sessions = 0; ///< Number of currently open sessions to this port - std::string name; ///< Name of client port (optional) + KServerPort* server_port{}; ///< ServerPort associated with this client port. + s32 max_sessions{}; ///< Maximum number of simultaneous sessions the port can have + std::atomic<s32> num_sessions{}; ///< Number of currently open sessions to this port + std::string name; ///< Name of client port (optional) }; } // namespace Kernel diff --git a/src/core/hle/kernel/server_port.cpp b/src/core/hle/kernel/k_server_port.cpp index addaaa5cf..2c51d66db 100644 --- a/src/core/hle/kernel/server_port.cpp +++ b/src/core/hle/kernel/k_server_port.cpp @@ -5,18 +5,23 @@ #include <tuple> #include "common/assert.h" #include "core/hle/kernel/k_client_port.h" +#include "core/hle/kernel/k_server_port.h" #include "core/hle/kernel/k_server_session.h" #include "core/hle/kernel/k_thread.h" #include "core/hle/kernel/object.h" -#include "core/hle/kernel/server_port.h" #include "core/hle/kernel/svc_results.h" namespace Kernel { -ServerPort::ServerPort(KernelCore& kernel) : KSynchronizationObject{kernel} {} -ServerPort::~ServerPort() = default; +KServerPort::KServerPort(KernelCore& kernel) : KSynchronizationObject{kernel} {} +KServerPort::~KServerPort() = default; -ResultVal<KServerSession*> ServerPort::Accept() { +void KServerPort::Initialize(std::string&& name_) { + // Set member variables. + name = std::move(name_); +} + +ResultVal<KServerSession*> KServerPort::Accept() { if (pending_sessions.empty()) { return ResultNotFound; } @@ -26,30 +31,35 @@ ResultVal<KServerSession*> ServerPort::Accept() { return MakeResult(session); } -void ServerPort::AppendPendingSession(KServerSession* pending_session) { +void KServerPort::AppendPendingSession(KServerSession* pending_session) { pending_sessions.push_back(std::move(pending_session)); if (pending_sessions.size() == 1) { NotifyAvailable(); } } -bool ServerPort::IsSignaled() const { +void KServerPort::Destroy() {} + +bool KServerPort::IsSignaled() const { return !pending_sessions.empty(); } -ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions, - std::string name) { - std::shared_ptr<ServerPort> server_port = std::make_shared<ServerPort>(kernel); +KServerPort::PortPair KServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions, + std::string name) { + KServerPort* server_port = new KServerPort(kernel); KClientPort* client_port = new KClientPort(kernel); + KAutoObject::Create(server_port); KAutoObject::Create(client_port); + server_port->Initialize(name + "_Server"); client_port->Initialize(max_sessions, name + "_Client"); + client_port->server_port = server_port; server_port->name = name + "_Server"; - return std::make_pair(std::move(server_port), client_port); + return std::make_pair(server_port, client_port); } } // namespace Kernel diff --git a/src/core/hle/kernel/server_port.h b/src/core/hle/kernel/k_server_port.h index f7d443df8..13fa54e5e 100644 --- a/src/core/hle/kernel/server_port.h +++ b/src/core/hle/kernel/k_server_port.h @@ -20,13 +20,17 @@ class KernelCore; class KServerSession; class SessionRequestHandler; -class ServerPort final : public KSynchronizationObject { +class KServerPort final : public KSynchronizationObject { + KERNEL_AUTOOBJECT_TRAITS(KServerPort, KSynchronizationObject); + public: - explicit ServerPort(KernelCore& kernel); - ~ServerPort() override; + explicit KServerPort(KernelCore& kernel); + virtual ~KServerPort() override; using HLEHandler = std::shared_ptr<SessionRequestHandler>; - using PortPair = std::pair<std::shared_ptr<ServerPort>, KClientPort*>; + using PortPair = std::pair<KServerPort*, KClientPort*>; + + void Initialize(std::string&& name_); /** * Creates a pair of ServerPort and an associated ClientPort. @@ -39,18 +43,6 @@ public: static PortPair CreatePortPair(KernelCore& kernel, u32 max_sessions, std::string name = "UnknownPort"); - std::string GetTypeName() const override { - return "ServerPort"; - } - std::string GetName() const override { - return name; - } - - static constexpr HandleType HANDLE_TYPE = HandleType::ServerPort; - HandleType GetHandleType() const override { - return HANDLE_TYPE; - } - /** * Accepts a pending incoming connection on this port. If there are no pending sessions, will * return ERR_NO_PENDING_SESSIONS. @@ -79,9 +71,23 @@ public: /// waiting to be accepted by this port. void AppendPendingSession(KServerSession* pending_session); - bool IsSignaled() const override; + // Overridden virtual functions. + virtual void Destroy() override; + virtual bool IsSignaled() const override; + + // DEPRECATED - void Finalize() override {} + std::string GetTypeName() const override { + return "ServerPort"; + } + std::string GetName() const override { + return name; + } + + static constexpr HandleType HANDLE_TYPE = HandleType::ServerPort; + HandleType GetHandleType() const override { + return HANDLE_TYPE; + } private: /// ServerSessions waiting to be accepted by the port |