1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-18 21:35:06 +00:00

Automatically call Inode::flush_metadata() before an Inode is destroyed.

Use a little template magic to have Retainable::release() call out to
T::will_be_destroyed() if such a function exists before actually calling
the destructor. This gives us full access to virtual functions in the
pre-destruction code.
This commit is contained in:
Andreas Kling 2018-12-19 22:28:09 +01:00
parent 1f44cd9dd9
commit d0f06e5f3f
6 changed files with 41 additions and 17 deletions

View file

@ -129,6 +129,12 @@ Inode::~Inode()
{
}
void Inode::will_be_destroyed()
{
if (m_metadata_dirty)
flush_metadata();
}
int Inode::set_atime(Unix::time_t ts)
{
if (fs().is_readonly())
@ -136,7 +142,7 @@ int Inode::set_atime(Unix::time_t ts)
if (m_metadata.atime == ts)
return 0;
m_metadata.atime = ts;
m_dirty = true;
m_metadata_dirty = true;
return 0;
}
@ -147,7 +153,7 @@ int Inode::set_ctime(Unix::time_t ts)
if (m_metadata.ctime == ts)
return 0;
m_metadata.ctime = ts;
m_dirty = true;
m_metadata_dirty = true;
return 0;
}
@ -158,6 +164,6 @@ int Inode::set_mtime(Unix::time_t ts)
if (m_metadata.mtime == ts)
return 0;
m_metadata.mtime = ts;
m_dirty = true;
m_metadata_dirty = true;
return 0;
}