The Pedigree Project 0.1
signalfd-syscalls.h
1/* Copyright (c) 2026, Pedigree Developers. */
2#ifndef POSIX_SIGNALFD_SYSCALLS_H
3#define POSIX_SIGNALFD_SYSCALLS_H
4
5#include "pedigree/kernel/process/Readiness.h"
6
7#include "descriptor-read.h"
8#include "queued-signal.h"
9
10class SignalFdState;
12
13class SignalFdView final : public ReadinessSource {
14 public:
15 ~SignalFdView() override;
16 ReadyMask queryReady();
18 ReadyMask queryCallerReady();
19 ReadinessGenerations callerReadinessGenerations();
20
21 private:
22 friend class SignalFd;
23 friend class SignalFdObserver;
27 bool subscribe();
28 void changed(bool maskChanged);
29 ReadinessGenerations generationsFor(const SharedPointer<PendingSignalBinding>& binding);
33 ReadinessSubscription m_PendingSubscription;
34 ReadinessSubscription m_MaskSubscription;
35 Mutex m_GenerationLock;
36 SharedPointer<PendingSignalBinding> m_GenerationBinding;
37 uint64_t m_MaskGeneration = 0;
38 uint64_t m_PendingGeneration = 0;
39 uint64_t m_ReadGeneration = 0;
40};
41
42class SignalFd {
43 public:
44 explicit SignalFd(uint64_t mask);
45 ~SignalFd();
46 ssize_t readToUser(void* destination, size_t count, bool canBlock);
47 ssize_t readWithCopy(size_t count, bool canBlock, PosixDescriptorReadCopy copy, void* context);
48 SharedPointer<SignalFdView> bindCaller();
49 bool setMask(uint64_t mask);
50 bool addDescriptorOwner();
51 void removeDescriptorOwner();
52
53 private:
55};
56
57int posix_signalfd(int fd, const uint64_t* mask, size_t size);
58int posix_signalfd4(int fd, const uint64_t* mask, size_t size, int flags);
59#endif
Definition Mutex.h:56
ReadinessGenerations readinessGenerations() override