mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-05 17:01:47 +00:00
Ram_fs: immediate directory notifications
Do not mark and defer notification for directories when a file is created or removed, mark and immediately queue a notification. Fix #2808
This commit is contained in:
parent
a9082eb162
commit
e005d966b4
@ -62,6 +62,7 @@ class Ram_fs::Directory : public Node
|
|||||||
_num_entries++;
|
_num_entries++;
|
||||||
|
|
||||||
mark_as_updated();
|
mark_as_updated();
|
||||||
|
notify_listeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
void discard(Node *node) override
|
void discard(Node *node) override
|
||||||
@ -70,6 +71,7 @@ class Ram_fs::Directory : public Node
|
|||||||
_num_entries--;
|
_num_entries--;
|
||||||
|
|
||||||
mark_as_updated();
|
mark_as_updated();
|
||||||
|
notify_listeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
Node *lookup(char const *path, bool return_parent = false) override
|
Node *lookup(char const *path, bool return_parent = false) override
|
||||||
|
@ -256,7 +256,6 @@ class Ram_fs::Session_component : public File_system::Session_rpc_object
|
|||||||
File(_alloc, name.string());
|
File(_alloc, name.string());
|
||||||
|
|
||||||
dir->adopt_unsynchronized(file);
|
dir->adopt_unsynchronized(file);
|
||||||
open_node.mark_as_written();
|
|
||||||
}
|
}
|
||||||
catch (Allocator::Out_of_memory) { throw No_space(); }
|
catch (Allocator::Out_of_memory) { throw No_space(); }
|
||||||
}
|
}
|
||||||
@ -444,7 +443,6 @@ class Ram_fs::Session_component : public File_system::Session_rpc_object
|
|||||||
dir->discard(node);
|
dir->discard(node);
|
||||||
|
|
||||||
destroy(_alloc, node);
|
destroy(_alloc, node);
|
||||||
open_node.mark_as_written();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -508,20 +506,6 @@ class Ram_fs::Session_component : public File_system::Session_rpc_object
|
|||||||
from_dir->discard(node);
|
from_dir->discard(node);
|
||||||
to_dir->adopt_unsynchronized(node);
|
to_dir->adopt_unsynchronized(node);
|
||||||
|
|
||||||
/*
|
|
||||||
* If the file was moved from one directory to another we
|
|
||||||
* need to inform the new directory 'to_dir'. The original
|
|
||||||
* directory 'from_dir' will always get notified (i.e.,
|
|
||||||
* when just the file name was changed) below.
|
|
||||||
*/
|
|
||||||
to_dir->mark_as_updated();
|
|
||||||
open_to_dir_node.mark_as_written();
|
|
||||||
to_dir->notify_listeners();
|
|
||||||
|
|
||||||
from_dir->mark_as_updated();
|
|
||||||
open_from_dir_node.mark_as_written();
|
|
||||||
from_dir->notify_listeners();
|
|
||||||
|
|
||||||
node->mark_as_updated();
|
node->mark_as_updated();
|
||||||
node->notify_listeners();
|
node->notify_listeners();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user