M module-vfs/drivers/include/purefs/fs/drivers/mount_point_ext4.hpp => module-vfs/drivers/include/purefs/fs/drivers/mount_point_ext4.hpp +7 -9
@@ 46,16 46,14 @@ namespace purefs::fs::drivers
class ext4_locker
{
public:
- explicit ext4_locker(std::shared_ptr<mount_point_ext4> mnt_ext) : m_mnt_ext(mnt_ext)
- {
- m_mnt_ext->lock();
- }
- ~ext4_locker()
- {
- m_mnt_ext->unlock();
- }
+ explicit ext4_locker(std::shared_ptr<mount_point_ext4> mnt_ext);
+ ~ext4_locker();
+ ext4_locker(ext4_locker &) = delete;
+ ext4_locker(ext4_locker &&) = delete;
+ ext4_locker &operator=(ext4_locker &) = delete;
+ ext4_locker &operator=(ext4_locker &&) = delete;
private:
- const std::shared_ptr<mount_point_ext4> m_mnt_ext;
+ const std::weak_ptr<mount_point_ext4> m_mnt_ext;
};
} // namespace purefs::fs::drivers
M module-vfs/drivers/src/purefs/fs/mount_point_ext4.cpp => module-vfs/drivers/src/purefs/fs/mount_point_ext4.cpp +23 -1
@@ 4,6 4,8 @@
#include <purefs/fs/drivers/mount_point_ext4.hpp>
#include <mutex.hpp>
#include <string>
+#include <cstdlib>
+#include <log/log.hpp>
namespace purefs::fs::drivers
{
@@ 18,6 20,7 @@ namespace purefs::fs::drivers
return ret;
}
} // namespace
+
mount_point_ext4::mount_point_ext4(std::shared_ptr<blkdev::internal::disk_handle> diskh,
std::string_view path,
unsigned flags,
@@ 28,13 31,32 @@ namespace purefs::fs::drivers
mount_point_ext4::~mount_point_ext4()
{}
+
auto mount_point_ext4::lock() noexcept -> void
{
m_lock->Lock();
}
+
auto mount_point_ext4::unlock() noexcept -> void
{
m_lock->Unlock();
}
-} // namespace purefs::fs::drivers>
\ No newline at end of file
+ ext4_locker::ext4_locker(std::shared_ptr<mount_point_ext4> mnt_ext) : m_mnt_ext(mnt_ext)
+ {
+ mnt_ext->lock();
+ }
+
+ ext4_locker::~ext4_locker()
+ {
+ auto ptr = m_mnt_ext.lock();
+ if (ptr) {
+ ptr->unlock();
+ }
+ else {
+ LOG_FATAL("Unable to unlock ext4 filesystem");
+ std::abort();
+ }
+ }
+
+} // namespace purefs::fs::drivers