From 13cd25e7b006ddd723906e1e91e65b6cca01ad7e Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 1 Apr 2020 15:45:12 +0200 Subject: [PATCH] vfs/ram: avoid 2x mutex releases in guard Issue #3612 --- repos/os/src/lib/vfs/ram_file_system.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/repos/os/src/lib/vfs/ram_file_system.h b/repos/os/src/lib/vfs/ram_file_system.h index bfe66ff2f..615712589 100644 --- a/repos/os/src/lib/vfs/ram_file_system.h +++ b/repos/os/src/lib/vfs/ram_file_system.h @@ -244,10 +244,11 @@ class Vfs_ram::Node : private Genode::Avl_node, private Genode::Mutex struct Guard { Node &node; + bool release { true }; Guard(Node *guard_node) : node(*guard_node) { node.acquire(); } - ~Guard() { node.release(); } + ~Guard() { if (release) node.release(); } }; }; @@ -837,8 +838,10 @@ class Vfs::Ram_file_system : public Vfs::File_system if (!to_dir) return RENAME_ERR_NO_ENTRY; /* unlock the node so a second guard can be constructed */ - if (from_dir == to_dir) + if (from_dir == to_dir) { from_dir->Node::release(); + from_guard.release = false; + } Node::Guard to_guard(to_dir);