Kernel: Customize File::unref() and make it virtual

Make File inherit from RefCountedBase and provide a custom unref()
implementation. This will allow subclasses that participate in lists to
remove themselves in a safe way when being destroyed.
This commit is contained in:
Andreas Kling 2021-08-16 20:58:23 +02:00
parent fc0cd8317a
commit 641083f3b8
2 changed files with 10 additions and 1 deletions

View file

@ -20,6 +20,14 @@ File::~File()
{ {
} }
bool File::unref() const
{
if (deref_base())
return false;
delete this;
return true;
}
KResultOr<NonnullRefPtr<FileDescription>> File::open(int options) KResultOr<NonnullRefPtr<FileDescription>> File::open(int options)
{ {
auto description = FileDescription::create(*this); auto description = FileDescription::create(*this);

View file

@ -71,9 +71,10 @@ public:
// - Should create a Region in the Process and return it if successful. // - Should create a Region in the Process and return it if successful.
class File class File
: public RefCounted<File> : public RefCountedBase
, public Weakable<File> { , public Weakable<File> {
public: public:
virtual bool unref() const;
virtual ~File(); virtual ~File();
virtual KResultOr<NonnullRefPtr<FileDescription>> open(int options); virtual KResultOr<NonnullRefPtr<FileDescription>> open(int options);