summaryrefslogtreecommitdiff
path: root/Kernel/MasterPTY.h
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-01-30 18:26:19 +0100
committerAndreas Kling <awesomekling@gmail.com>2019-01-30 18:47:18 +0100
commitb4e478aa508407b999766efea882e4ec4f2f3b6d (patch)
treef25cc9faa4c7e57a0d46f10532358f176164707d /Kernel/MasterPTY.h
parent027d26cd5d6dbfceef0c2ade42a51068dcdcf43f (diff)
downloadserenity-b4e478aa508407b999766efea882e4ec4f2f3b6d.zip
Deallocate PTY's when they close.
This required a fair bit of plumbing. The CharacterDevice::close() virtual will now be closed by ~FileDescriptor(), allowing device implementations to do custom cleanup at that point. One big problem remains: if the master PTY is closed before the slave PTY, we go into crashy land.
Diffstat (limited to 'Kernel/MasterPTY.h')
-rw-r--r--Kernel/MasterPTY.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/Kernel/MasterPTY.h b/Kernel/MasterPTY.h
index cc375feab6..29d7106927 100644
--- a/Kernel/MasterPTY.h
+++ b/Kernel/MasterPTY.h
@@ -1,7 +1,8 @@
#pragma once
+#include <AK/Badge.h>
#include <Kernel/CharacterDevice.h>
-#include "DoubleBuffer.h"
+#include <Kernel/DoubleBuffer.h>
class SlavePTY;
@@ -21,12 +22,13 @@ public:
String pts_name() const;
void on_slave_write(const byte*, size_t);
bool can_write_from_slave() const;
+ void notify_slave_closed(Badge<SlavePTY>);
private:
// ^CharacterDevice
virtual const char* class_name() const override { return "MasterPTY"; }
- SlavePTY& m_slave;
+ RetainPtr<SlavePTY> m_slave;
unsigned m_index;
DoubleBuffer m_buffer;
};