Kernel: Implement deletion of SMO objects
This commit is contained in:
@@ -21,6 +21,13 @@ namespace Kernel
|
||||
return *s_instance;
|
||||
}
|
||||
|
||||
SharedMemoryObjectManager::Object::~Object()
|
||||
{
|
||||
for (auto paddr : paddrs)
|
||||
if (paddr)
|
||||
Heap::get().release_page(paddr);
|
||||
}
|
||||
|
||||
BAN::ErrorOr<SharedMemoryObjectManager::Key> SharedMemoryObjectManager::create_object(size_t size, PageTable::flags_t flags)
|
||||
{
|
||||
ASSERT(size % PAGE_SIZE == 0);
|
||||
@@ -43,6 +50,18 @@ namespace Kernel
|
||||
return key;
|
||||
}
|
||||
|
||||
BAN::ErrorOr<void> SharedMemoryObjectManager::delete_object(Key key)
|
||||
{
|
||||
LockGuard _(m_mutex);
|
||||
|
||||
auto it = m_objects.find(key);
|
||||
if (it == m_objects.end())
|
||||
return BAN::Error::from_errno(ENOENT);
|
||||
|
||||
m_objects.remove(it);
|
||||
return {};
|
||||
}
|
||||
|
||||
BAN::ErrorOr<BAN::UniqPtr<SharedMemoryObject>> SharedMemoryObjectManager::map_object(Key key, PageTable& page_table, AddressRange address_range)
|
||||
{
|
||||
LockGuard _(m_mutex);
|
||||
|
||||
@@ -1418,6 +1418,12 @@ namespace Kernel
|
||||
return TRY(SharedMemoryObjectManager::get().create_object(len, page_flags));
|
||||
}
|
||||
|
||||
BAN::ErrorOr<long> Process::sys_smo_delete(SharedMemoryObjectManager::Key key)
|
||||
{
|
||||
TRY(SharedMemoryObjectManager::get().delete_object(key));
|
||||
return 0;
|
||||
}
|
||||
|
||||
BAN::ErrorOr<long> Process::sys_smo_map(SharedMemoryObjectManager::Key key)
|
||||
{
|
||||
auto region = TRY(SharedMemoryObjectManager::get().map_object(key, page_table(), { .start = 0x400000, .end = KERNEL_OFFSET }));
|
||||
|
||||
Reference in New Issue
Block a user