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:
parent
cae33305b0
commit
7a1d09ef1a
3 changed files with 17 additions and 3 deletions
|
@ -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 };
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue