1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:57:35 +00:00

Let the slave PTY keep the master PTY alive.

This ownership model is a bit confusing. There's a retain cycle between
MasterPTY and SlavePTY, but it's broken when the SlavePTY is closed, meaning
that there are no more FileDescriptors referring to it.
This commit is contained in:
Andreas Kling 2019-01-30 19:05:59 +01:00
parent 45fba60ab5
commit 2b4374d08e
4 changed files with 7 additions and 4 deletions

View file

@ -14,6 +14,7 @@ SlavePTY::SlavePTY(MasterPTY& master, unsigned index)
SlavePTY::~SlavePTY()
{
dbgprintf("~SlavePTY(%u)\n", m_index);
DevPtsFS::the().unregister_slave_pty(*this);
VFS::the().unregister_character_device(*this);
}
@ -31,15 +32,15 @@ void SlavePTY::on_master_write(const byte* buffer, size_t size)
void SlavePTY::on_tty_write(const byte* data, size_t size)
{
m_master.on_slave_write(data, size);
m_master->on_slave_write(data, size);
}
bool SlavePTY::can_write(Process&) const
{
return m_master.can_write_from_slave();
return m_master->can_write_from_slave();
}
void SlavePTY::close()
{
m_master.notify_slave_closed(Badge<SlavePTY>());
m_master->notify_slave_closed(Badge<SlavePTY>());
}