1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 22:07:34 +00:00

Kernel: Use shared locking mode in some places

The notable piece of code that remains to be converted is Ext2FS.
This commit is contained in:
Sergey Bugaev 2020-04-18 12:50:35 +03:00 committed by Andreas Kling
parent 05ba4295e9
commit 54550365eb
11 changed files with 26 additions and 26 deletions

View file

@ -168,7 +168,7 @@ ByteBuffer FileDescription::read_entire_file()
ssize_t FileDescription::get_dir_entries(u8* buffer, ssize_t size) ssize_t FileDescription::get_dir_entries(u8* buffer, ssize_t size)
{ {
LOCKER(m_lock); LOCKER(m_lock, Lock::Mode::Shared);
if (!is_directory()) if (!is_directory())
return -ENOTDIR; return -ENOTDIR;

View file

@ -491,7 +491,7 @@ Optional<KBuffer> procfs$net_arp(InodeIdentifier)
{ {
KBufferBuilder builder; KBufferBuilder builder;
JsonArraySerializer array { builder }; JsonArraySerializer array { builder };
LOCKER(arp_table().lock()); LOCKER(arp_table().lock(), Lock::Mode::Shared);
for (auto& it : arp_table().resource()) { for (auto& it : arp_table().resource()) {
auto obj = array.add_object(); auto obj = array.add_object();
obj.add("mac_address", it.value.to_string()); obj.add("mac_address", it.value.to_string());
@ -983,7 +983,7 @@ static ByteBuffer read_sys_bool(InodeIdentifier inode_id)
auto buffer = ByteBuffer::create_uninitialized(2); auto buffer = ByteBuffer::create_uninitialized(2);
auto* lockable_bool = reinterpret_cast<Lockable<bool>*>(variable.address); auto* lockable_bool = reinterpret_cast<Lockable<bool>*>(variable.address);
{ {
LOCKER(lockable_bool->lock()); LOCKER(lockable_bool->lock(), Lock::Mode::Shared);
buffer[0] = lockable_bool->resource() ? '1' : '0'; buffer[0] = lockable_bool->resource() ? '1' : '0';
} }
buffer[1] = '\n'; buffer[1] = '\n';
@ -1013,7 +1013,7 @@ static ByteBuffer read_sys_string(InodeIdentifier inode_id)
ASSERT(variable.type == SysVariable::Type::String); ASSERT(variable.type == SysVariable::Type::String);
auto* lockable_string = reinterpret_cast<Lockable<String>*>(variable.address); auto* lockable_string = reinterpret_cast<Lockable<String>*>(variable.address);
LOCKER(lockable_string->lock()); LOCKER(lockable_string->lock(), Lock::Mode::Shared);
return lockable_string->resource().to_byte_buffer(); return lockable_string->resource().to_byte_buffer();
} }

View file

@ -81,7 +81,7 @@ unsigned TmpFS::next_inode_index()
RefPtr<Inode> TmpFS::get_inode(InodeIdentifier identifier) const RefPtr<Inode> TmpFS::get_inode(InodeIdentifier identifier) const
{ {
LOCKER(m_lock); LOCKER(m_lock, Lock::Mode::Shared);
ASSERT(identifier.fsid() == fsid()); ASSERT(identifier.fsid() == fsid());
auto it = m_inodes.find(identifier.index()); auto it = m_inodes.find(identifier.index());
@ -161,14 +161,14 @@ NonnullRefPtr<TmpFSInode> TmpFSInode::create_root(TmpFS& fs)
InodeMetadata TmpFSInode::metadata() const InodeMetadata TmpFSInode::metadata() const
{ {
LOCKER(m_lock); LOCKER(m_lock, Lock::Mode::Shared);
return m_metadata; return m_metadata;
} }
bool TmpFSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&)> callback) const bool TmpFSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&)> callback) const
{ {
LOCKER(m_lock); LOCKER(m_lock, Lock::Mode::Shared);
if (!is_directory()) if (!is_directory())
return false; return false;
@ -183,7 +183,7 @@ bool TmpFSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>
ssize_t TmpFSInode::read_bytes(off_t offset, ssize_t size, u8* buffer, FileDescription*) const ssize_t TmpFSInode::read_bytes(off_t offset, ssize_t size, u8* buffer, FileDescription*) const
{ {
LOCKER(m_lock); LOCKER(m_lock, Lock::Mode::Shared);
ASSERT(!is_directory()); ASSERT(!is_directory());
ASSERT(size >= 0); ASSERT(size >= 0);
ASSERT(offset >= 0); ASSERT(offset >= 0);
@ -247,7 +247,7 @@ ssize_t TmpFSInode::write_bytes(off_t offset, ssize_t size, const u8* buffer, Fi
RefPtr<Inode> TmpFSInode::lookup(StringView name) RefPtr<Inode> TmpFSInode::lookup(StringView name)
{ {
LOCKER(m_lock); LOCKER(m_lock, Lock::Mode::Shared);
ASSERT(is_directory()); ASSERT(is_directory());
if (name == ".") if (name == ".")
@ -263,7 +263,7 @@ RefPtr<Inode> TmpFSInode::lookup(StringView name)
size_t TmpFSInode::directory_entry_count() const size_t TmpFSInode::directory_entry_count() const
{ {
LOCKER(m_lock); LOCKER(m_lock, Lock::Mode::Shared);
ASSERT(is_directory()); ASSERT(is_directory());
return 2 + m_children.size(); return 2 + m_children.size();
} }

View file

@ -45,9 +45,9 @@ Lockable<InlineLinkedList<LocalSocket>>& LocalSocket::all_sockets()
return *s_list; return *s_list;
} }
void LocalSocket::for_each(Function<void(LocalSocket&)> callback) void LocalSocket::for_each(Function<void(const LocalSocket&)> callback)
{ {
LOCKER(all_sockets().lock()); LOCKER(all_sockets().lock(), Lock::Mode::Shared);
for (auto& socket : all_sockets().resource()) for (auto& socket : all_sockets().resource())
callback(socket); callback(socket);
} }

View file

@ -42,7 +42,7 @@ public:
static KResultOr<NonnullRefPtr<Socket>> create(int type); static KResultOr<NonnullRefPtr<Socket>> create(int type);
virtual ~LocalSocket() override; virtual ~LocalSocket() override;
static void for_each(Function<void(LocalSocket&)>); static void for_each(Function<void(const LocalSocket&)>);
StringView socket_path() const; StringView socket_path() const;
String absolute_path(const FileDescription& description) const override; String absolute_path(const FileDescription& description) const override;

View file

@ -38,9 +38,9 @@
namespace Kernel { namespace Kernel {
void TCPSocket::for_each(Function<void(TCPSocket&)> callback) void TCPSocket::for_each(Function<void(const TCPSocket&)> callback)
{ {
LOCKER(sockets_by_tuple().lock()); LOCKER(sockets_by_tuple().lock(), Lock::Mode::Shared);
for (auto& it : sockets_by_tuple().resource()) for (auto& it : sockets_by_tuple().resource())
callback(*it.value); callback(*it.value);
} }
@ -80,7 +80,7 @@ Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>& TCPSocket::sockets_by_tuple()
RefPtr<TCPSocket> TCPSocket::from_tuple(const IPv4SocketTuple& tuple) RefPtr<TCPSocket> TCPSocket::from_tuple(const IPv4SocketTuple& tuple)
{ {
LOCKER(sockets_by_tuple().lock()); LOCKER(sockets_by_tuple().lock(), Lock::Mode::Shared);
auto exact_match = sockets_by_tuple().resource().get(tuple); auto exact_match = sockets_by_tuple().resource().get(tuple);
if (exact_match.has_value()) if (exact_match.has_value())
@ -230,7 +230,7 @@ void TCPSocket::send_outgoing_packets()
auto now = kgettimeofday(); auto now = kgettimeofday();
LOCKER(m_not_acked_lock); LOCKER(m_not_acked_lock, Lock::Mode::Shared);
for (auto& packet : m_not_acked) { for (auto& packet : m_not_acked) {
timeval diff; timeval diff;
timeval_sub(packet.tx_time, now, diff); timeval_sub(packet.tx_time, now, diff);

View file

@ -37,7 +37,7 @@ namespace Kernel {
class TCPSocket final : public IPv4Socket class TCPSocket final : public IPv4Socket
, public Weakable<TCPSocket> { , public Weakable<TCPSocket> {
public: public:
static void for_each(Function<void(TCPSocket&)>); static void for_each(Function<void(const TCPSocket&)>);
static NonnullRefPtr<TCPSocket> create(int protocol); static NonnullRefPtr<TCPSocket> create(int protocol);
virtual ~TCPSocket() override; virtual ~TCPSocket() override;

View file

@ -34,9 +34,9 @@
namespace Kernel { namespace Kernel {
void UDPSocket::for_each(Function<void(UDPSocket&)> callback) void UDPSocket::for_each(Function<void(const UDPSocket&)> callback)
{ {
LOCKER(sockets_by_port().lock()); LOCKER(sockets_by_port().lock(), Lock::Mode::Shared);
for (auto it : sockets_by_port().resource()) for (auto it : sockets_by_port().resource())
callback(*it.value); callback(*it.value);
} }
@ -53,7 +53,7 @@ SocketHandle<UDPSocket> UDPSocket::from_port(u16 port)
{ {
RefPtr<UDPSocket> socket; RefPtr<UDPSocket> socket;
{ {
LOCKER(sockets_by_port().lock()); LOCKER(sockets_by_port().lock(), Lock::Mode::Shared);
auto it = sockets_by_port().resource().find(port); auto it = sockets_by_port().resource().find(port);
if (it == sockets_by_port().resource().end()) if (it == sockets_by_port().resource().end())
return {}; return {};

View file

@ -36,7 +36,7 @@ public:
virtual ~UDPSocket() override; virtual ~UDPSocket() override;
static SocketHandle<UDPSocket> from_port(u16); static SocketHandle<UDPSocket> from_port(u16);
static void for_each(Function<void(UDPSocket&)>); static void for_each(Function<void(const UDPSocket&)>);
private: private:
explicit UDPSocket(int protocol); explicit UDPSocket(int protocol);

View file

@ -704,7 +704,7 @@ int Process::sys$gethostname(char* buffer, ssize_t size)
return -EINVAL; return -EINVAL;
if (!validate_write(buffer, size)) if (!validate_write(buffer, size))
return -EFAULT; return -EFAULT;
LOCKER(*s_hostname_lock); LOCKER(*s_hostname_lock, Lock::Mode::Shared);
if ((size_t)size < (s_hostname->length() + 1)) if ((size_t)size < (s_hostname->length() + 1))
return -ENAMETOOLONG; return -ENAMETOOLONG;
copy_to_user(buffer, s_hostname->characters(), s_hostname->length() + 1); copy_to_user(buffer, s_hostname->characters(), s_hostname->length() + 1);
@ -2157,7 +2157,7 @@ int Process::sys$uname(utsname* buf)
REQUIRE_PROMISE(stdio); REQUIRE_PROMISE(stdio);
if (!validate_write_typed(buf)) if (!validate_write_typed(buf))
return -EFAULT; return -EFAULT;
LOCKER(*s_hostname_lock); LOCKER(*s_hostname_lock, Lock::Mode::Shared);
if (s_hostname->length() + 1 > sizeof(utsname::nodename)) if (s_hostname->length() + 1 > sizeof(utsname::nodename))
return -ENAMETOOLONG; return -ENAMETOOLONG;
copy_to_user(buf->sysname, "SerenityOS", 11); copy_to_user(buf->sysname, "SerenityOS", 11);

View file

@ -39,7 +39,7 @@ Lockable<HashMap<int, NonnullOwnPtr<SharedBuffer>>>& shared_buffers()
void SharedBuffer::sanity_check(const char* what) void SharedBuffer::sanity_check(const char* what)
{ {
LOCKER(shared_buffers().lock()); LOCKER(shared_buffers().lock(), Lock::Mode::Shared);
unsigned found_refs = 0; unsigned found_refs = 0;
for (const auto& ref : m_refs) for (const auto& ref : m_refs)
@ -56,7 +56,7 @@ void SharedBuffer::sanity_check(const char* what)
bool SharedBuffer::is_shared_with(pid_t peer_pid) bool SharedBuffer::is_shared_with(pid_t peer_pid)
{ {
LOCKER(shared_buffers().lock()); LOCKER(shared_buffers().lock(), Lock::Mode::Shared);
if (m_global) if (m_global)
return true; return true;
for (auto& ref : m_refs) { for (auto& ref : m_refs) {