浏览代码

Kernel: Bail out earlier from Process::lookup_stacks_directory

Hendiadyoin1 3 年之前
父节点
当前提交
05381753c2
共有 1 个文件被更改,包括 9 次插入10 次删除
  1. 9 10
      Kernel/ProcessSpecificExposed.cpp

+ 9 - 10
Kernel/ProcessSpecificExposed.cpp

@@ -59,21 +59,20 @@ ErrorOr<void> Process::traverse_stacks_directory(FileSystemID fsid, Function<Err
 
 ErrorOr<NonnullRefPtr<Inode>> Process::lookup_stacks_directory(const ProcFS& procfs, StringView name) const
 {
-    ErrorOr<NonnullRefPtr<ProcFSProcessPropertyInode>> thread_stack_inode { ENOENT };
+    auto maybe_needle = name.to_uint();
+    if (!maybe_needle.has_value())
+        return ENOENT;
+    auto needle = maybe_needle.release_value();
 
-    // FIXME: Try to exit the loop earlier
+    ErrorOr<NonnullRefPtr<ProcFSProcessPropertyInode>> thread_stack_inode { ENOENT };
     for_each_thread([&](const Thread& thread) {
         int tid = thread.tid().value();
         VERIFY(!(tid < 0));
-        if (name.to_int() == tid) {
-            auto maybe_inode = ProcFSProcessPropertyInode::try_create_for_thread_stack(procfs, thread.tid(), pid());
-            if (maybe_inode.is_error()) {
-                thread_stack_inode = maybe_inode.release_error();
-                return;
-            }
-
-            thread_stack_inode = maybe_inode.release_value();
+        if (needle == (unsigned)tid) {
+            thread_stack_inode = ProcFSProcessPropertyInode::try_create_for_thread_stack(procfs, thread.tid(), pid());
+            return IterationDecision::Break;
         }
+        return IterationDecision::Continue;
     });
 
     if (thread_stack_inode.is_error())