The Pedigree Project 0.1
ipc-namespace.cc
1/* Copyright (c) 2026, Pedigree Developers. */
2#include "ipc-namespace.h"
3#include "pedigree/kernel/process/Thread.h"
4#include "pedigree/kernel/processor/Processor.h"
5#include "pedigree/kernel/processor/ProcessorInformation.h"
6
7namespace {
8uint64_t nextIdentity = 0;
9}
10
11IpcNamespace::IpcNamespace(const UserNamespaceRef& owner)
12 : m_Identity(__atomic_add_fetch(&nextIdentity, 1, __ATOMIC_RELAXED)), m_Owner(owner) {}
13
14IpcNamespace::~IpcNamespace() {
15 posix_sem_namespace_exit(m_Identity);
16 posix_shm_namespace_exit(m_Identity);
17 posix_msg_namespace_exit(m_Identity);
18 posix_mqueue_namespace_exit(m_Identity);
19}
20
21SharedPointer<IpcNamespace> posix_ipc_namespace() {
22 return posix_ipc_namespace(*Processor::information().getCurrentThread());
23}
24
25uint64_t posix_ipc_namespace_id() {
26 auto space = posix_ipc_namespace();
27 return space ? space->identity() : 0;
28}
29
30UserNamespaceRef posix_ipc_owner() {
31 auto space = posix_ipc_namespace();
32 return space ? space->owner() : UserNamespaceRef();
33}
static ProcessorInformation & information()