Bläddra i källkod

Kernel: Clone Process::m_gids on fork() and hook up any framebuffer region.

Andreas Kling 6 år sedan
förälder
incheckning
e115ae5641
1 ändrade filer med 6 tillägg och 1 borttagningar
  1. 6 1
      Kernel/Process.cpp

+ 6 - 1
Kernel/Process.cpp

@@ -232,13 +232,18 @@ Process* Process::fork(RegisterDump& regs)
 
     for (auto& region : m_regions) {
 #ifdef FORK_DEBUG
-        dbgprintf("fork: cloning Region{%p}\n", region.ptr());
+        dbgprintf("fork: cloning Region{%p} \"%s\" L%x\n", region.ptr(), region->name.characters(), region->linearAddress.get());
 #endif
         auto cloned_region = region->clone();
         child->m_regions.append(move(cloned_region));
         MM.map_region(*child, *child->m_regions.last());
+        if (region.ptr() == m_display_framebuffer_region.ptr())
+            child->m_display_framebuffer_region = child->m_regions.last().copyRef();
     }
 
+    for (auto gid : m_gids)
+        child->m_gids.set(gid);
+
     child->m_tss.eax = 0; // fork() returns 0 in the child :^)
     child->m_tss.ebx = regs.ebx;
     child->m_tss.ecx = regs.ecx;