20#include "pedigree/kernel/process/Process.h"
21#include "pedigree/kernel/processor/Processor.h"
23#include "modules/subsys/posix/FileDescriptor.h"
24#include "modules/subsys/posix/PosixSubsystem.h"
30std::vector<SharedPointer<FileDescriptor>> g_Descriptors;
31std::mutex g_DescriptorsLock;
35 std::lock_guard<std::mutex> guard(g_DescriptorsLock);
36 if (fd < 0 ||
static_cast<size_t>(fd) >= g_Descriptors.size()) {
40 descriptor.retain(g_Descriptors[fd]);
41 return static_cast<bool>(descriptor);
53 std::lock_guard<std::mutex> guard(g_DescriptorsLock);
54 if (
static_cast<size_t>(fd) >= g_Descriptors.size()) {
55 g_Descriptors.resize(fd + 1);
58 retiring = pedigree_std::move(g_Descriptors[fd]);
59 g_Descriptors[fd] = pedigree_std::move(replacement);
62 retiring->unpublish();
70 std::lock_guard<std::mutex> guard(g_DescriptorsLock);
71 if (fd < 0 ||
static_cast<size_t>(fd) >= g_Descriptors.size() ||
72 g_Descriptors[fd] != descriptor.m_Descriptor) {
76 retiring = pedigree_std::move(g_Descriptors[fd]);
80 retiring->unpublish();
86size_t getAvailableDescriptor() {
87 std::lock_guard<std::mutex> guard(g_DescriptorsLock);
88 const size_t descriptor = g_Descriptors.size();
89 g_Descriptors.resize(descriptor + 1);
95 std::lock_guard<std::mutex> guard(g_DescriptorsLock);
96 const size_t fd = g_Descriptors.size();
98 g_Descriptors.push_back(published);
99 lease.retain(published);
108 ERROR(
"No subsystem for this process!");
134size_t getAvailableDescriptor() {
136 return pSubsystem->
getFd();
size_t fd
Descriptor number.
bool acquireFileDescriptor(size_t fd, DescriptorLease &descriptor)
bool closeFileDescriptor(size_t fd, const DescriptorLease &descriptor)
size_t getFd(size_t minimum=0)
size_t installFileDescriptor(FileDescriptor *descriptor, DescriptorLease &lease, size_t minimum=0)
void addFileDescriptor(size_t fd, FileDescriptor *pFd)
static ProcessorInformation & information()