mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 16:25:06 +00:00
Kernel: Make InodeWatcher inode registration completely OOM-fallible
InodeWatcher::register_inode was already partially fallible, but the insertion of the inodes and watch descriptions into their respective hash maps was not. Note that we cannot simply TRY the insertion into both, as that could result in an inconsistent state, instead we must remove the inode from the inode hash map if the insertion into the watch description hash map failed.
This commit is contained in:
parent
bd603003b5
commit
87bd930e7e
1 changed files with 6 additions and 2 deletions
|
@ -123,8 +123,12 @@ ErrorOr<int> InodeWatcher::register_inode(Inode& inode, unsigned event_mask)
|
|||
|
||||
auto description = TRY(WatchDescription::create(wd, inode, event_mask));
|
||||
|
||||
m_inode_to_watches.set(inode.identifier(), description.ptr());
|
||||
m_wd_to_watches.set(wd, move(description));
|
||||
TRY(m_inode_to_watches.try_set(inode.identifier(), description.ptr()));
|
||||
auto result = m_wd_to_watches.try_set(wd, move(description));
|
||||
if (result.is_error()) {
|
||||
m_inode_to_watches.remove(inode.identifier());
|
||||
return result.release_error();
|
||||
}
|
||||
|
||||
inode.register_watcher({}, *this);
|
||||
return wd;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue