|
The Pedigree Project 0.1
|
#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 Event * | cloneForDelivery () |
| size_t | getSpecificNestingLevel () |
| Event (const Event &other) | |
| Event & | operator= (const Event &other) |
| size_t | pendingCount () |
| bool | tryAcquireRegistration (SendLease ®istration) |
| 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 |
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.
| using RelayEvent::Callback = void (*)(Thread*) |
Definition at line 23 of file RelayEvent.h.
| RelayEvent::RelayEvent | ( | Callback | callback, |
| size_t | number | ||
| ) |
Definition at line 14 of file RelayEvent.cc.
|
staticprivate |
Definition at line 28 of file RelayEvent.cc.
|
overridevirtual |
|
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.
| pBuffer | The buffer to serialize to. |
Implements Event.
Definition at line 19 of file RelayEvent.cc.
|
private |
Definition at line 33 of file RelayEvent.h.
|
private |
Definition at line 34 of file RelayEvent.h.