The Pedigree Project 0.1
Public Types | Public Member Functions | Static Private Member Functions | Private Attributes | List of all members
RelayEvent Class Reference

#include <RelayEvent.h>

+ Inheritance diagram for RelayEvent:
+ Collaboration diagram for RelayEvent:

Public Types

using Callback = void(*)(Thread *)
 
- Public Types inherited from Event
enum class  HandlerPrivilege { Kernel , User }
 
enum class  UserReturnDelivery { NotApplicable , Delivered , Failed }
 

Public Member Functions

 RelayEvent (Callback callback, size_t number)
 
size_t serialize (uint8_t *buffer) override
 
size_t getNumber () override
 
- Public Member Functions inherited from Event
 Event (uintptr_t handlerAddress, bool isDeletable, size_t specificNestingLevel=~0UL, HandlerPrivilege handlerPrivilege=HandlerPrivilege::Kernel)
 
virtual bool isDeletable ()
 
uintptr_t getHandlerAddress ()
 
HandlerPrivilege getHandlerPrivilege () const
 
bool isValidHandlerMapping (size_t mappingFlags) const
 
virtual bool isSignalEvent () const
 
virtual bool prefersAlternateUserStack () const
 
virtual bool requiresExactUserReturnState () const
 
virtual UserReturnDelivery deliverAtUserReturn (InterruptState &)
 
virtual UserReturnDelivery deliverAtUserReturn (SyscallState &)
 
virtual bool isDeliverableWhileProcessSuspended () const
 
virtual EventcloneForDelivery ()
 
size_t getSpecificNestingLevel ()
 
 Event (const Event &other)
 
Eventoperator= (const Event &other)
 
size_t pendingCount ()
 
bool tryAcquireRegistration (SendLease &registration)
 
virtual void waitForDeliveries ()
 
void retire ()
 
void beginRetirement (Retirement &retirement)
 

Static Private Member Functions

static void dispatch (size_t buffer)
 

Private Attributes

Callback m_Callback
 
size_t m_Number
 

Additional Inherited Members

- Static Public Member Functions inherited from Event
static uintptr_t getTrampoline ()
 
static uintptr_t getSecondaryTrampoline ()
 
static uintptr_t getHandlerBuffer ()
 
static size_t getHandlerBufferSize ()
 
static uintptr_t getLastHandlerBuffer ()
 
static bool unserialize (uint8_t *pBuffer, Event &event)
 
static size_t getEventType (uint8_t *pBuffer)
 
- Protected Attributes inherited from Event
uintptr_t m_HandlerAddress
 
HandlerPrivilege m_HandlerPrivilege
 
bool m_bIsDeletable
 
size_t m_NestingLevel
 
uint64_t m_Magic
 
List< Thread * > m_Threads
 
Spinlock m_Lock
 

Detailed Description

A stable Event that resolves work through a callback when it is delivered.

The callback value is serialized before the Event delivery lease is released, so the handler never dereferences the RelayEvent object.

Definition at line 21 of file RelayEvent.h.

Member Typedef Documentation

◆ Callback

using RelayEvent::Callback = void (*)(Thread*)

Definition at line 23 of file RelayEvent.h.

Constructor & Destructor Documentation

◆ RelayEvent()

RelayEvent::RelayEvent ( Callback  callback,
size_t  number 
)

Definition at line 14 of file RelayEvent.cc.

Member Function Documentation

◆ dispatch()

void RelayEvent::dispatch ( size_t  buffer)
staticprivate

Definition at line 28 of file RelayEvent.cc.

◆ getNumber()

size_t RelayEvent::getNumber ( )
overridevirtual

Returns the event number / ID.

Implements Event.

Definition at line 24 of file RelayEvent.cc.

◆ serialize()

size_t RelayEvent::serialize ( uint8_t *  pBuffer)
overridevirtual

Given a buffer EVENT_LIMIT bytes long, take the variables present in this object and convert them to a binary form.

It can be assumed that this function will only be called when the Event is about to be dispatched, and so the inhibited mask of the current Thread is available to be changed to what the event handler requires. This change will be undone when the handler completes.

Parameters
pBufferThe buffer to serialize to.
Returns
The number of bytes serialized.

Implements Event.

Definition at line 19 of file RelayEvent.cc.

Member Data Documentation

◆ m_Callback

Callback RelayEvent::m_Callback
private

Definition at line 33 of file RelayEvent.h.

◆ m_Number

size_t RelayEvent::m_Number
private

Definition at line 34 of file RelayEvent.h.


The documentation for this class was generated from the following files: