diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-01-30 18:26:19 +0100 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-01-30 18:47:18 +0100 |
commit | b4e478aa508407b999766efea882e4ec4f2f3b6d (patch) | |
tree | f25cc9faa4c7e57a0d46f10532358f176164707d /Kernel/MasterPTY.h | |
parent | 027d26cd5d6dbfceef0c2ade42a51068dcdcf43f (diff) | |
download | serenity-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.h | 6 |
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; }; |