diff options
author | Andreas Kling <kling@serenityos.org> | 2021-07-21 21:23:39 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-07-21 21:24:26 +0200 |
commit | f9b7ea6de93c71d387052192773641c414718365 (patch) | |
tree | 2764f5d70c365da689bf5a2745cee39bed08e860 | |
parent | 687a12d7fb480cf3586c97e30cdb4f67d7e72da5 (diff) | |
download | serenity-f9b7ea6de93c71d387052192773641c414718365.zip |
Revert "Kernel: Use IntrusiveList for keeping track of InodeWatchers"
This reverts commit 43d6a7e74ec76bf23f78ca281d54c60bb7b952d1.
This breaks multi-inode watchers.
-rw-r--r-- | Kernel/FileSystem/Inode.cpp | 22 | ||||
-rw-r--r-- | Kernel/FileSystem/Inode.h | 6 | ||||
-rw-r--r-- | Kernel/FileSystem/InodeWatcher.h | 5 |
3 files changed, 14 insertions, 19 deletions
diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp index 435f7a7eac..d8e31de11c 100644 --- a/Kernel/FileSystem/Inode.cpp +++ b/Kernel/FileSystem/Inode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2021, sin-ack <sin-ack@protonmail.com> * * SPDX-License-Identifier: BSD-2-Clause @@ -105,7 +105,7 @@ Inode::~Inode() all_with_lock().remove(*this); for (auto& watcher : m_watchers) { - watcher.unregister_by_inode({}, identifier()); + watcher->unregister_by_inode({}, identifier()); } } @@ -168,15 +168,15 @@ bool Inode::unbind_socket() void Inode::register_watcher(Badge<InodeWatcher>, InodeWatcher& watcher) { MutexLocker locker(m_inode_lock); - VERIFY(!m_watchers.contains(watcher)); - m_watchers.append(watcher); + VERIFY(!m_watchers.contains(&watcher)); + m_watchers.set(&watcher); } void Inode::unregister_watcher(Badge<InodeWatcher>, InodeWatcher& watcher) { MutexLocker locker(m_inode_lock); - VERIFY(m_watchers.contains(watcher)); - m_watchers.remove(watcher); + VERIFY(m_watchers.contains(&watcher)); + m_watchers.remove(&watcher); } NonnullRefPtr<FIFO> Inode::fifo() @@ -209,7 +209,7 @@ void Inode::set_metadata_dirty(bool metadata_dirty) // FIXME: Maybe we should hook into modification events somewhere else, I'm not sure where. // We don't always end up on this particular code path, for instance when writing to an ext2fs file. for (auto& watcher : m_watchers) { - watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::MetadataModified); + watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::MetadataModified); } } } @@ -219,7 +219,7 @@ void Inode::did_add_child(InodeIdentifier const&, String const& name) MutexLocker locker(m_inode_lock); for (auto& watcher : m_watchers) { - watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildCreated, name); + watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildCreated, name); } } @@ -233,7 +233,7 @@ void Inode::did_remove_child(InodeIdentifier const&, String const& name) } for (auto& watcher : m_watchers) { - watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildDeleted, name); + watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildDeleted, name); } } @@ -241,7 +241,7 @@ void Inode::did_modify_contents() { MutexLocker locker(m_inode_lock); for (auto& watcher : m_watchers) { - watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ContentModified); + watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ContentModified); } } @@ -249,7 +249,7 @@ void Inode::did_delete_self() { MutexLocker locker(m_inode_lock); for (auto& watcher : m_watchers) { - watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::Deleted); + watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::Deleted); } } diff --git a/Kernel/FileSystem/Inode.h b/Kernel/FileSystem/Inode.h index a055936775..f35a27e71b 100644 --- a/Kernel/FileSystem/Inode.h +++ b/Kernel/FileSystem/Inode.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2021, sin-ack <sin-ack@protonmail.com> * * SPDX-License-Identifier: BSD-2-Clause @@ -8,6 +8,7 @@ #pragma once #include <AK/Function.h> +#include <AK/HashTable.h> #include <AK/IntrusiveList.h> #include <AK/RefCounted.h> #include <AK/String.h> @@ -16,7 +17,6 @@ #include <Kernel/FileSystem/FileSystem.h> #include <Kernel/FileSystem/InodeIdentifier.h> #include <Kernel/FileSystem/InodeMetadata.h> -#include <Kernel/FileSystem/InodeWatcher.h> #include <Kernel/Forward.h> #include <Kernel/KResult.h> #include <Kernel/Mutex.h> @@ -118,7 +118,7 @@ private: InodeIndex m_index { 0 }; WeakPtr<SharedInodeVMObject> m_shared_vmobject; RefPtr<LocalSocket> m_socket; - InodeWatcher::List m_watchers; + HashTable<InodeWatcher*> m_watchers; bool m_metadata_dirty { false }; RefPtr<FIFO> m_fifo; IntrusiveListNode<Inode> m_inode_list_node; diff --git a/Kernel/FileSystem/InodeWatcher.h b/Kernel/FileSystem/InodeWatcher.h index 6fe43e7473..e7dca21499 100644 --- a/Kernel/FileSystem/InodeWatcher.h +++ b/Kernel/FileSystem/InodeWatcher.h @@ -80,11 +80,6 @@ private: // watch description, so they will overlap. HashMap<int, NonnullOwnPtr<WatchDescription>> m_wd_to_watches; HashMap<InodeIdentifier, WatchDescription*> m_inode_to_watches; - - IntrusiveListNode<InodeWatcher> m_list_node; - -public: - using List = IntrusiveList<InodeWatcher, RawPtr<InodeWatcher>, &InodeWatcher::m_list_node>; }; } |