mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 20:17:41 +00:00
Kernel: Pass new region owner to Region::clone
This commit is contained in:
parent
a0c91719d8
commit
2f429bd2d5
3 changed files with 6 additions and 6 deletions
|
@ -88,7 +88,7 @@ pid_t Process::sys$fork(RegisterState& regs)
|
||||||
#ifdef FORK_DEBUG
|
#ifdef FORK_DEBUG
|
||||||
dbg() << "fork: cloning Region{" << ®ion << "} '" << region.name() << "' @ " << region.vaddr();
|
dbg() << "fork: cloning Region{" << ®ion << "} '" << region.name() << "' @ " << region.vaddr();
|
||||||
#endif
|
#endif
|
||||||
auto region_clone = region.clone();
|
auto region_clone = region.clone(*child);
|
||||||
if (!region_clone) {
|
if (!region_clone) {
|
||||||
dbg() << "fork: Cannot clone region, insufficient memory";
|
dbg() << "fork: Cannot clone region, insufficient memory";
|
||||||
// TODO: tear down new process?
|
// TODO: tear down new process?
|
||||||
|
|
|
@ -86,7 +86,7 @@ void Region::unregister_purgeable_page_ranges()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OwnPtr<Region> Region::clone()
|
OwnPtr<Region> Region::clone(Process& new_owner)
|
||||||
{
|
{
|
||||||
ASSERT(Process::current());
|
ASSERT(Process::current());
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ OwnPtr<Region> Region::clone()
|
||||||
auto new_vmobject = AnonymousVMObject::create_with_size(size(), AllocationStrategy::Reserve); // TODO: inherit committed non-volatile areas?
|
auto new_vmobject = AnonymousVMObject::create_with_size(size(), AllocationStrategy::Reserve); // TODO: inherit committed non-volatile areas?
|
||||||
if (!new_vmobject)
|
if (!new_vmobject)
|
||||||
return {};
|
return {};
|
||||||
auto zeroed_region = Region::create_user_accessible(get_owner().ptr(), m_range, new_vmobject.release_nonnull(), 0, m_name, m_access);
|
auto zeroed_region = Region::create_user_accessible(&new_owner, m_range, new_vmobject.release_nonnull(), 0, m_name, m_access);
|
||||||
zeroed_region->copy_purgeable_page_ranges(*this);
|
zeroed_region->copy_purgeable_page_ranges(*this);
|
||||||
zeroed_region->set_mmap(m_mmap);
|
zeroed_region->set_mmap(m_mmap);
|
||||||
zeroed_region->set_inherit_mode(m_inherit_mode);
|
zeroed_region->set_inherit_mode(m_inherit_mode);
|
||||||
|
@ -114,7 +114,7 @@ OwnPtr<Region> Region::clone()
|
||||||
ASSERT(vmobject().is_shared_inode());
|
ASSERT(vmobject().is_shared_inode());
|
||||||
|
|
||||||
// Create a new region backed by the same VMObject.
|
// Create a new region backed by the same VMObject.
|
||||||
auto region = Region::create_user_accessible(get_owner().ptr(), m_range, m_vmobject, m_offset_in_vmobject, m_name, m_access);
|
auto region = Region::create_user_accessible(&new_owner, m_range, m_vmobject, m_offset_in_vmobject, m_name, m_access);
|
||||||
if (m_vmobject->is_anonymous())
|
if (m_vmobject->is_anonymous())
|
||||||
region->copy_purgeable_page_ranges(*this);
|
region->copy_purgeable_page_ranges(*this);
|
||||||
region->set_mmap(m_mmap);
|
region->set_mmap(m_mmap);
|
||||||
|
@ -134,7 +134,7 @@ OwnPtr<Region> Region::clone()
|
||||||
#endif
|
#endif
|
||||||
// Set up a COW region. The parent (this) region becomes COW as well!
|
// Set up a COW region. The parent (this) region becomes COW as well!
|
||||||
remap();
|
remap();
|
||||||
auto clone_region = Region::create_user_accessible(get_owner().ptr(), m_range, vmobject_clone.release_nonnull(), m_offset_in_vmobject, m_name, m_access);
|
auto clone_region = Region::create_user_accessible(&new_owner, m_range, vmobject_clone.release_nonnull(), m_offset_in_vmobject, m_name, m_access);
|
||||||
if (m_vmobject->is_anonymous())
|
if (m_vmobject->is_anonymous())
|
||||||
clone_region->copy_purgeable_page_ranges(*this);
|
clone_region->copy_purgeable_page_ranges(*this);
|
||||||
if (m_stack) {
|
if (m_stack) {
|
||||||
|
|
|
@ -100,7 +100,7 @@ public:
|
||||||
|
|
||||||
PageFaultResponse handle_fault(const PageFault&);
|
PageFaultResponse handle_fault(const PageFault&);
|
||||||
|
|
||||||
OwnPtr<Region> clone();
|
OwnPtr<Region> clone(Process&);
|
||||||
|
|
||||||
bool contains(VirtualAddress vaddr) const
|
bool contains(VirtualAddress vaddr) const
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue