8#include "pedigree/kernel/process/Event.h"
9#include "pedigree/kernel/process/Semaphore.h"
10#include "pedigree/kernel/utilities/BufferMonitors.h"
11#include "pedigree/kernel/utilities/new"
12#include "pedigree/kernel/utilities/utility.h"
17#include "pedigree/kernel/process/Thread.h"
25 eventRegistration(pedigree_std::move(registration)) {}
28 : pThread(
nullptr), pEvent(
nullptr), pSemaphore(semaphore), eventRegistration() {}
36BufferMonitors::BufferMonitors() : m_Targets() {}
38BufferMonitors::~BufferMonitors() {
48 m_Targets.pushBack(
new MonitorTarget(thread, event, pedigree_std::move(registration)));
53 m_Targets.pushBack(
new MonitorTarget(semaphore));
57 while (m_Targets.count()) {
60 if (target->pThread) {
61 target->pThread->
sendEvent(target->pEvent);
62 }
else if (target->pSemaphore) {
71 while (m_Targets.count()) {
74 if (target->pSemaphore) {
82void BufferMonitors::cull(
Thread* thread) {
83 for (
auto it = m_Targets.begin(); it != m_Targets.end();) {
84 MonitorTarget* target = *it;
85 if (target->pThread == thread) {
87 it = m_Targets.erase(it);
94void BufferMonitors::cull(
Semaphore* semaphore) {
95 for (
auto it = m_Targets.begin(); it != m_Targets.end();) {
96 MonitorTarget* target = *it;
97 if (target->pSemaphore == semaphore) {
99 it = m_Targets.erase(it);
106void BufferMonitors::cull(
Event* event) {
107 for (
auto it = m_Targets.begin(); it != m_Targets.end();) {
108 MonitorTarget* target = *it;
109 if (target->pEvent == event) {
111 it = m_Targets.erase(it);
bool add(Thread *thread, Event *event)
bool tryAcquireRegistration(SendLease ®istration)
bool sendEvent(Event *pEvent)