1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 19:38:12 +00:00

Kernel: Closing a file descriptor should not always close the file

When there is more than one file descriptor for a file closing
one of them should not close the underlying file.

Previously this relied on the file's ref_count() but at least
for sockets this didn't work reliably.
This commit is contained in:
Gunnar Beutner 2021-04-30 10:33:33 +02:00 committed by Andreas Kling
parent cae33305b0
commit 7a1d09ef1a
3 changed files with 17 additions and 3 deletions

View file

@ -82,8 +82,8 @@ public:
virtual bool can_read(const FileDescription&, size_t) const = 0;
virtual bool can_write(const FileDescription&, size_t) const = 0;
virtual KResult attach(FileDescription&) { return KSuccess; }
virtual void detach(FileDescription&) { }
virtual KResult attach(FileDescription&);
virtual void detach(FileDescription&);
virtual void did_seek(FileDescription&, off_t) { }
virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) = 0;
virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) = 0;
@ -112,6 +112,8 @@ public:
virtual FileBlockCondition& block_condition() { return m_block_condition; }
size_t attach_count() const { return m_attach_count; }
protected:
File();
@ -138,6 +140,7 @@ private:
}
FileBlockCondition m_block_condition;
size_t m_attach_count { 0 };
};
}