Browse Source

Revert "Kernel: Avoid allocating under spinlock in ProcessGroup::find_or_create"

This reverts commit e95eb7a51d8295c96cddf20f116139deecbb69d4.

This is causing some sort of list corruption, as evident by #7313
I haven't been able to figure it out yet, so lets revert this change
until I can figure out what's going on.
Brian Gianforcaro 4 years ago
parent
commit
3d7cc471d6
2 changed files with 2 additions and 17 deletions
  1. 2 15
      Kernel/ProcessGroup.cpp
  2. 0 2
      Kernel/ProcessGroup.h

+ 2 - 15
Kernel/ProcessGroup.cpp

@@ -30,31 +30,18 @@ RefPtr<ProcessGroup> ProcessGroup::create(ProcessGroupID pgid)
 
 RefPtr<ProcessGroup> ProcessGroup::find_or_create(ProcessGroupID pgid)
 {
-    // Avoid allocating under spinlock, this compromises by wasting the
-    // allocation when we race with another process to see if they have
-    // already created a process group.
-    auto process_group = adopt_ref_if_nonnull(new ProcessGroup(pgid));
     ScopedSpinLock lock(g_process_groups_lock);
 
-    if (auto existing = from_pgid_nolock(pgid))
+    if (auto existing = from_pgid(pgid))
         return existing.release_nonnull();
 
-    if (!process_group)
-        return {};
-
-    g_process_groups->prepend(process_group);
-    return process_group;
+    return create(pgid);
 }
 
 RefPtr<ProcessGroup> ProcessGroup::from_pgid(ProcessGroupID pgid)
 {
     ScopedSpinLock lock(g_process_groups_lock);
-    return from_pgid_nolock(pgid);
-}
 
-RefPtr<ProcessGroup> ProcessGroup::from_pgid_nolock(ProcessGroupID pgid)
-{
-    VERIFY(g_process_groups_lock.own_lock());
     for (auto& group : *g_process_groups) {
         if (group.pgid() == pgid)
             return &group;

+ 0 - 2
Kernel/ProcessGroup.h

@@ -40,8 +40,6 @@ private:
     {
     }
 
-    static RefPtr<ProcessGroup> from_pgid_nolock(ProcessGroupID);
-
     ProcessGroup* m_prev { nullptr };
     ProcessGroup* m_next { nullptr };