forked from suyu/suyu
fixup! hle: kernel: Migrate KSession, KClientSession, and KServerSession to KAutoObject.
This commit is contained in:
parent
1b074b8984
commit
f6d45b747e
3 changed files with 28 additions and 22 deletions
|
@ -47,11 +47,11 @@ public:
|
|||
|
||||
void Initialize(KSession* parent_, std::string&& name_);
|
||||
|
||||
constexpr KSession* GetParent() {
|
||||
KSession* GetParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
constexpr const KSession* GetParent() const {
|
||||
const KSession* GetParent() const {
|
||||
return parent;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,25 +49,31 @@ void KSession::Initialize(KClientPort* port_, const std::string& name_) {
|
|||
}
|
||||
|
||||
void KSession::Finalize() {
|
||||
if (port != nullptr) {
|
||||
if (port == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
port->OnSessionFinalized();
|
||||
port->Close();
|
||||
}
|
||||
}
|
||||
|
||||
void KSession::OnServerClosed() {
|
||||
if (GetState() == State::Normal) {
|
||||
if (GetState() != State::Normal) {
|
||||
return;
|
||||
}
|
||||
|
||||
SetState(State::ServerClosed);
|
||||
client.OnServerClosed();
|
||||
}
|
||||
}
|
||||
|
||||
void KSession::OnClientClosed() {
|
||||
if (GetState() == State::Normal) {
|
||||
if (GetState() != State::Normal) {
|
||||
return;
|
||||
}
|
||||
|
||||
SetState(State::ClientClosed);
|
||||
server.OnClientClosed();
|
||||
}
|
||||
}
|
||||
|
||||
void KSession::PostDestroy(uintptr_t arg) {
|
||||
// Release the session count resource the owner process holds.
|
||||
|
|
|
@ -16,14 +16,6 @@ namespace Kernel {
|
|||
class KSession final : public KAutoObjectWithSlabHeapAndContainer<KSession, KAutoObjectWithList> {
|
||||
KERNEL_AUTOOBJECT_TRAITS(KSession, KAutoObject);
|
||||
|
||||
private:
|
||||
enum class State : u8 {
|
||||
Invalid = 0,
|
||||
Normal = 1,
|
||||
ClientClosed = 2,
|
||||
ServerClosed = 3,
|
||||
};
|
||||
|
||||
public:
|
||||
explicit KSession(KernelCore& kernel);
|
||||
virtual ~KSession() override;
|
||||
|
@ -74,20 +66,28 @@ public:
|
|||
return port;
|
||||
}
|
||||
|
||||
private:
|
||||
enum class State : u8 {
|
||||
Invalid = 0,
|
||||
Normal = 1,
|
||||
ClientClosed = 2,
|
||||
ServerClosed = 3,
|
||||
};
|
||||
|
||||
private:
|
||||
void SetState(State state) {
|
||||
atomic_state = static_cast<u8>(state);
|
||||
}
|
||||
|
||||
State GetState() const {
|
||||
return static_cast<State>(atomic_state.load());
|
||||
return static_cast<State>(atomic_state.load(std::memory_order_relaxed));
|
||||
}
|
||||
|
||||
private:
|
||||
KServerSession server;
|
||||
KClientSession client;
|
||||
std::atomic<std::underlying_type<State>::type> atomic_state{
|
||||
static_cast<std::underlying_type<State>::type>(State::Invalid)};
|
||||
std::atomic<std::underlying_type_t<State>> atomic_state{
|
||||
static_cast<std::underlying_type_t<State>>(State::Invalid)};
|
||||
KClientPort* port{};
|
||||
KProcess* process{};
|
||||
bool initialized{};
|
||||
|
|
Loading…
Reference in a new issue