_SYSTEM_KERNEL_INVOCATION_H_included_
#define _SYSTEM_KERNEL_INVOCATION_H_included_
Invocation
Invocationki_pathint *
Invocationki_argvchar **
Invocationki_environchar **
Invocationki_spawnattrint
Invocationki_spawnattr_initchar
Invocationki_optionschar
Invocation()
POSIX_SYSCALL
POSIX_SYSCALL()
RETRY_INIT20%
RETRY_INIT()
RETRY70%
RETRY()
CONFIG_SOCKET_TRANSFER_LIMIT10%
#define CONFIG_SOCKET_TRANSFER_LIMIT 1
kp_message
kp_messageiovec
kp_messageiovstruct iovec
kp_messagemsghdr
kp_messagemhstruct msghdr
kp_messagebufchar[CMSG_SPACE(sizeof(kport_t) * 1)]
kp_messagecmsghdr
kp_message_alignstruct cmsghdr
kp_messageabunion (unnamed union at /x/p/python/fault/system/extensions/kernel/posix.c:40:2)
_init_kp_message140%struct cmsghdr *
_init_kp_message(m, buf, bufsize)
kp_chfd100%int
kp_chfd(kp, op, delta)
kp_chfl100%int
kp_chfl(kp, op, delta)
kp_receive230%int
kp_receive(kp, buf, size)
kp_transmit220%int
kp_transmit(kp, buf, size)
kp_accept240%int
kp_accept(kp, buf, size)
Regular socket accept from listening sockets.
kp_alloc_meta170%int
kp_alloc_meta(kp, buf, size)
Allocate kport_t pairs capable of transmitting and receiving other kernel ports.
kp_alloc_bidirectional170%int
kp_alloc_bidirectional(kp, buf, size)
kp_alloc_unidirectional170%int
kp_alloc_unidirectional(kp, buf, size)
_SYSTEM_KERNEL_EVENT_H_included_
#define _SYSTEM_KERNEL_EVENT_H_included_
EV_CYCLIC
#define EV_CYCLIC 1
EVENT_TYPE_META_LIST90%
EVENT_TYPE_META_LIST()
EVENT_TYPE_TIME_LIST60%
EVENT_TYPE_TIME_LIST()
EVENT_TYPE_IP_LIST60%
EVENT_TYPE_IP_LIST()
EVENT_TYPE_FS_LIST90%
EVENT_TYPE_FS_LIST()
EVENT_TYPE_IO_LIST90%
EVENT_TYPE_IO_LIST()
EVENT_TYPE_LIST150%
EVENT_TYPE_LIST()
EV_TYPE_ID20%
EV_TYPE_ID()
EV_TYPE
#define EV_TYPE(NAME, C, CYCLIC) EV_TYPE_ID(NAME),
#define EV_TYPE(NAME, C, CYCLIC) \
case EV_TYPE_ID(NAME): \
return(#NAME); \
break;
#define EV_TYPE(NAME, C, CYCLIC) \
case EV_TYPE_ID(NAME): \
*typname = #NAME; \
break;
#define EV_TYPE(NAME, C, CYCLIC) \
case EV_TYPE_ID(NAME): \
return("evt_" #NAME); \
break;
#define EV_TYPE(...) EV_CONSTRUCTORS(__VA_ARGS__)
#define EV_TYPE(NAME, C, CYCLIC) \
case EV_TYPE_ID(NAME): \
normal = #NAME; \
break;
#define EV_TYPE(NAME, C, CYCLIC) PyMethod_Keywords(NAME),
_SHIFT
#define _SHIFT(B,O) (B << O)
STRSHIFT50%
#define STRSHIFT(a) \
(_SHIFT(a[0],24)|_SHIFT(a[1],16)|_SHIFT(a[2],8)|_SHIFT(a[3],0))
STRCASE50%
#define STRCASE(a,b,c,d) \
(_SHIFT(a,24)|_SHIFT(b,16)|_SHIFT(c,8)|_SHIFT(d,0))
Event_Specification
Event_Specification()
Event_Type
Event_Type()
Event_GetSource
Event_GetSource()
Event_GetKPort
Event_GetKPort()
Event_GetTime
Event_GetTime()
Event_GetProcess
Event_GetProcess()
Event_GetSignal
Event_GetSignal()
Event_GetCorrelation
Event_GetCorrelation()
Event_SetSource
Event_SetSource()
Event_SetKPort
Event_SetKPort()
Event_SetTime
Event_SetTime()
Event_SetProcess
Event_SetProcess()
Event_SetSignal
Event_SetSignal()
Event_SetCorrelation
Event_SetCorrelation()
EventType
EventType()
evt_invalid
evt_invalid()
ev_type_name70%const char *
ev_type_name(etyp)
ev_type_code20%enum EventType
ev_type_code(n)
EventSpecification
EventSpecificationevs_typeenum EventType
EventSpecificationevs_sourceint
EventSpecificationevs_kresourceint
EventSpecificationtimeint
EventSpecificationprocessint
EventSpecificationsignal_codeint
EventSpecificationcorrelationint
EventSpecificationevs_fieldunion (unnamed union at /x/p/python/fault/system/extensions/kernel/event.h:180:2)
EventSpecificationevs_terminalint[0]
event_tstruct EventSpecification
event_t()
evs_type_name10%int
evs_type_name(evs, typname)
evs_type_identifier10%const char *
evs_type_identifier(evs)
Event
Event()
Eventevent_tint
LF
#define LF(FLAG) \
STATIC(PyObj) \
ln_get_##FLAG(Link ln, void *closure) \
{ \
if (Link_Get(ln, FLAG)) \
Py_RETURN_TRUE; \
Py_RETURN_FALSE; \
}
#define LF(FLAG) \
{#FLAG, (getter)ln_get_##FLAG, NULL, NULL},
ln_hash30%Py_hash_t
ln_hash(ln)
ln_richcompare90%PyObj
ln_richcompare(ln, operand, cmpop)
ln_call80%PyObj
ln_call(ln, args, kw)
ln_clear70%void
ln_clear(ln)
ln_traverse70%int
ln_traverse(self, visit, arg)
ln_new90%PyObj
ln_new(typ, args, kw)
ln_dealloc20%void
ln_dealloc(ln)
Link_Create90%PyObj
Link_Create(typ, ctx, ev, task)
_kports_alloc
_kports_alloc()
PyMethod_Id
#define PyMethod_Id(N) kp_##N
#define PyMethod_Id(N) k_##N
#define PyMethod_Id(N) inv_##N
#define PyMethod_Id(N) ev_##N
#define PyMethod_Id(N) ks_##N
PyMethod_TypeControl
#define PyMethod_TypeControl PyMethod_ClassType
#define PyMethod_TypeControl PyMethod_ClassType
kports_alloc110%KPorts
kports_alloc(fill, length)
kports_create90%KPorts
kports_create(data, length)
kp_close80%PyObj
kp_close(self)
kp_configure210%PyObj
kp_configure(self)
kp_allocate130%PyObj
kp_allocate(subtype, length)
kports_richcompare340%PyObj
kports_richcompare(self, x, op)
kports_length20%Py_ssize_t
kports_length(self)
kports_concat140%PyObj
kports_concat(self, x)
kports_repeat120%PyObj
kports_repeat(self, quantity)
kports_getitem70%PyObj
kports_getitem(self, index)
kports_setitem120%int
kports_setitem(self, index, val)
kports_subscript340%PyObj
kports_subscript(self, item)
kports_getbuffer30%int
kports_getbuffer(self, view, flags)
kports_new570%PyObj
kports_new(subtype, args, kw)
kports_dealloc20%void
kports_dealloc(self)
EPOLL_FLAGS
#define EPOLL_FLAGS EPOLLRDHUP
AEV_CREATE
#define AEV_CREATE EPOLL_CTL_ADD
#define AEV_CREATE EV_ADD
AEV_DELETE
#define AEV_DELETE EPOLL_CTL_DEL
#define AEV_DELETE EV_DELETE
AEV_UPDATE
#define AEV_UPDATE EPOLL_CTL_MOD
#define AEV_UPDATE EV_ADD
AEV_CYCLIC
AEV_CYCLIC()
AEV_CYCLIC()
AEV_CYCLIC_ENABLE
AEV_CYCLIC_ENABLE()
AEV_CYCLIC_ENABLE()
AEV_CYCLIC_DISABLE
AEV_CYCLIC_DISABLE()
AEV_CYCLIC_DISABLE()
AEV_LINK
AEV_LINK()
AEV_LINK()
KQ_FRAGMENT
#define KQ_FRAGMENT kport_t kq_root, kq_eventfd_interrupt;
#define KQ_FRAGMENT kport_t kq_root;
epoll_event
kevent_tstruct epoll_event
kevent_t()
kevent_t()
INITIAL_TASK_COUNT
#define INITIAL_TASK_COUNT 4
MAX_TASKS_PER_SEGMENT10%
#define MAX_TASKS_PER_SEGMENT 128
TASKQ_MEMORY_ERROR10%
TASKQ_MEMORY_ERROR()
TASKQ_PARALLEL_ERROR10%
TASKQ_PARALLEL_ERROR()
TASKQ_FULL10%
TASKQ_FULL()
TASKQ_ALLOCATION_SIZE10%
TASKQ_ALLOCATION_SIZE()
TASKQ_MEMORY_ACQUIRE10%
#define TASKQ_MEMORY_ACQUIRE PyMem_Malloc
TASKQ_MEMORY_RELEASE10%
#define TASKQ_MEMORY_RELEASE PyMem_Free
TASKQ_ALLOCATE30%
TASKQ_ALLOCATE()
taskq_extend120%int
taskq_extend(tq)
Append a memory allocation to the task queue.
taskq_insert10%int
taskq_insert(tq, callable)
Insert task at the end of the queue. Presume available space.
taskq_enqueue70%int
taskq_enqueue(tq, callable)
High-level append.
trap_execution_error320%void
trap_execution_error(errctl, errctx, task)
Handle error cases using errctl and PyErr_WriteUnraisable when it or other critical operations fail.
taskq_continue100%int
taskq_continue(tq)
Pop segments from TaskQueue.q_executing.
taskq_cycle60%int
taskq_cycle(tq)
taskq_execute220%int
taskq_execute(tq, errctl, errctx)
Execute the tasks in the TaskQueue.q_executing, and rotate TaskQueue.q_loading for the next cycle.
taskq_clear250%void
taskq_clear(tq)
Release all objects held by the queue.
taskq_traverse260%int
taskq_traverse(tq, visit, arg)
Container traversal for GC support.
taskq_initialize140%int
taskq_initialize(tq)
Initialize the given, already allocated, task queue.
_SYSTEM_KERNEL_SCHEDULER_H_included_
#define _SYSTEM_KERNEL_SCHEDULER_H_included_
Scheduler_GetTaskQueue10%
Scheduler_GetTaskQueue()
Scheduler_GetKernelQueue10%
Scheduler_GetKernelQueue()
Scheduler_GetExceptionTrap10%
Scheduler_GetExceptionTrap()
Scheduler_SetExceptionTrap20%
Scheduler_SetExceptionTrap()
Scheduler_UpdateExceptionTrap60%
Scheduler_UpdateExceptionTrap()
Scheduler
Scheduler()
SchedulerPyObjint
Schedulerks_waitingint
Schedulerks_excint
SchedulerTaskQueue
Schedulerks_tqstruct TaskQueue
SchedulerKernelQueue
Schedulerks_eqstruct KernelQueue
KPORT_TRANSFER150%
KPORT_TRANSFER()
PortsType
#define PortsType KPortsType
PYTHON_TYPES
PYTHON_TYPES()
k_preserve
#define k_preserve kport_clear_cloexec
k_released
#define k_released kport_set_cloexec
k_hostname
#define k_hostname get_hostname
k_machine_execution_context
#define k_machine_execution_context get_uname
k_machine
#define k_machine get_uname
k_clockticks
#define k_clockticks get_clock_ticks
k_set_process_title
#define k_set_process_title set_process_title
k_signalexit
#define k_signalexit signalexit
MODULE_FUNCTIONS
MODULE_FUNCTIONS()
ID
#define ID(NAME) \
if (PyType_Ready((PyTypeObject *) &( NAME##Type ))) \
goto error; \
Py_INCREF((PyObj) &( NAME##Type )); \
if (PyModule_AddObject(module, #NAME, (PyObj) &( NAME##Type )) < 0) \
{ Py_DECREF((PyObj) &( NAME##Type )); goto error; }
get_hostnamePyObj
get_hostname(mod)
get_uname80%PyObj
get_uname(mod)
utsname10%
get_clock_ticks20%PyObj
get_clock_ticks(mod)
set_process_title20%PyObj
set_process_title(mod, title)
inherit
inheritprocess_idint
prepare10%void
prepare()
_after_fork_parent60%int
_after_fork_parent(pc_param)
Execute the process._after_fork_parent object from a pending call.
parent80%void
parent()
_after_fork_child60%int
_after_fork_child(pc_param)
Execute the process._after_fork_child object from a pending call.
child70%void
child()
Synchronize with the parent process.
ltracefunc10%int
ltracefunc(ob, f, event, arg)
trace10%PyObj
trace(self, args)
Set the trace object on a set of threads. Only supports callable-object level. This is intended for debuggers.
_exit_by_signal50%void
_exit_by_signal()
Executed in atexit in order to preserve the signal's exit code.
signalexit100%PyObj
signalexit(mod, ob)
Register low-level atexit handler for exiting via a signal.
kport_clear_cloexec220%PyObj
kport_clear_cloexec(mod, seq)
Ensure that the kport is preserved across process images. Used by system to hold on to listening sockets.
Generally, most file descriptors created by system will have the FD_CLOEXEC flag set.
kport_set_cloexec220%PyObj
kport_set_cloexec(mod, seq)
k_initialize120%PyObj
k_initialize(mod, ctx)
_SYSTEM_KERNEL_KQUEUE_H_included_
#define _SYSTEM_KERNEL_KQUEUE_H_included_
AEV_TRANSMITS
AEV_TRANSMITS()
AEV_KPORT
AEV_KPORT()
NOTE_MSECONDS10%
#define NOTE_MSECONDS 0
EVFILT_SYSCOUNT
#define EVFILT_SYSCOUNT 32
EVFILT_EXCEPT
#define EVFILT_EXCEPT (-16 - EVFILT_SYSCOUNT)
KQ_EXCEPT_FILTERS
KQ_EXCEPT_FILTERS()
EVFILT_PROCDESC
#define EVFILT_PROCDESC (-4 - EVFILT_SYSCOUNT)
KQ_PROCDESC_FILTERS
KQ_PROCDESC_FILTERS()
KQ_USER_FILTERS
KQ_USER_FILTERS()
EV_USER_SETUP
EV_USER_SETUP()
EV_USER_TRIGGER
EV_USER_TRIGGER()
EVFILT_VNODE
#define EVFILT_VNODE (-32 - EVFILT_SYSCOUNT)
KQ_FILESYSTEM_FILTERS
KQ_FILESYSTEM_FILTERS()
EVFILT_MACHPORT
#define EVFILT_MACHPORT (-128 - EVFILT_SYSCOUNT)
KQ_MACHPORT_FILTERS
KQ_MACHPORT_FILTERS()
KQ_FILTER_LIST
KQ_FILTER_LIST()
EV_OOBAND
#define EV_OOBAND 0
KQ_FLAG_LIST
KQ_FLAG_LIST()
KFILTER_ERROR40%
KFILTER_ERROR()
NOTE_CLOSE_WRITE
#define NOTE_CLOSE_WRITE 0
NOTE_OPEN
#define NOTE_OPEN 0
NOTE_CLOSE
#define NOTE_CLOSE 0
KQ_VNODE_EVENT_LIST
KQ_VNODE_EVENT_LIST()
EVENT_FS_VOID_FLAGS10%
#define EVENT_FS_VOID_FLAGS NOTE_RENAME|NOTE_DELETE|NOTE_REVOKE
EVENT_FS_DELTA_FLAGS10%
#define EVENT_FS_DELTA_FLAGS NOTE_WRITE|NOTE_EXTEND
EVENT_FS_STATUS_FLAGS30%
#define EVENT_FS_STATUS_FLAGS EVENT_FS_VOID_FLAGS | EVENT_FS_DELTA_FLAGS
kevent
SIG
#define SIG(SID, CAT, SYM, ...) \
case SIG##SID: return #CAT "/" #SYM; break;
signal_stringconst char *
signal_string(sig)
kernelq_clearvoid
kernelq_clear(kq)
kernelq_traverse50%int
kernelq_traverse(kq, visit, arg)
kernelq_reference_update100%int
kernelq_reference_update(kq, ln, current)
Replace the link in the reference dictionary, but return the existing object if any.
kernelq_reference_delete100%int
kernelq_reference_delete(kq, ev)
kernelq_cyclic_event190%int
kernelq_cyclic_event(kq, cyclic, ln, kev)
Set or clear the cyclic flag on ln or raise an error if it's not acceptable for the given filter.
kernelq_transition390%int
kernelq_transition(kq, tq)
kernelq_cancel330%PyObj
kernelq_cancel(kq, ev)
IOPTION_SET_PGROUP
#define IOPTION_SET_PGROUP 1
SPAWN_ATTRIBUTES
SPAWN_ATTRIBUTES()
APPLE_SPAWN_EXTENSIONS
APPLE_SPAWN_EXTENSIONS()
POSIX_SPAWN_ATTRIBUTES
POSIX_SPAWN_ATTRIBUTES()
free_null_terminated_array60%
free_null_terminated_array()
inv_spawn810%PyObj
inv_spawn(self, args, kw)
inv_new1280%PyObj
inv_new(subtype, args, kw)
inv_dealloc180%void
inv_dealloc(self)
EV_CONSTRUCTORS140%
EV_CONSTRUCTORS()
ev_time_unitsint
ev_time_units(ev, args, kw)
Initialize an event for scheduling a timer.
ev_pid_reference140%int
ev_pid_reference(ev, args, kw)
Initialize an event with a process identifier and optional port.
ev_signal_reference150%int
ev_signal_reference(ev, args, kw)
Initialize an event with a signal code and optional port.
ev_reference80%int
ev_reference(ev, args, kw)
Initialize an event with an arbitrary reference.
ev_filesystem_reference200%int
ev_filesystem_reference(ev, args, kw)
Initialize an event with a filesystem Path. Monitoring events(fs_delta, fs_void, fs_status).
ev_io_reference90%int
ev_io_reference(ev, args, kw)
Initialize an event with a pair of kport_t.
ev_constructor440%PyObj
ev_constructor(typ, typstring)
ev_get_type40%PyObj
ev_get_type(ev, closure)
ev_get_port40%PyObj
ev_get_port(ev, closure)
ev_get_source60%PyObj
ev_get_source(ev, closure)
ev_hash360%Py_hash_t
ev_hash(ev)
ev_richcompare710%PyObj
ev_richcompare(ev, operand, cmpop)
ev_new280%PyObj
ev_new(typ, args, kw)
Copy Event. Type specific constructors must be used to create new instances.
ev_release180%void
ev_release(ev)
ev_clear60%void
ev_clear(ev)
ev_traverse60%int
ev_traverse(self, visit, arg)
ev_dealloc30%void
ev_dealloc(ev)
interrupt_wait90%int
interrupt_wait(ks)
Interrupt a running kernel.Scheduler.wait call.
interrupt_waitReturns
timespec
ks_enqueue150%PyObj
ks_enqueue(ks, callable)
ks_execute260%PyObj
ks_execute(self)
ks_termination250%int
ks_termination(ks, kq, tq)
ks_close190%PyObj
ks_close(self)
ks_void30%PyObj
ks_void(self)
ks_interrupt120%PyObj
ks_interrupt(self)
ks_dispatch320%PyObj
ks_dispatch(self, args, kw)
ks_cancel250%PyObj
ks_cancel(self, ref)
ks_operations20%PyObj
ks_operations(self)
ks__set_waiting20%PyObj
ks__set_waiting(self)
ks_wait250%PyObj
ks_wait(self, args)
ks_get_closed60%PyObj
ks_get_closed(self, closure)
ks_get_has_tasks60%PyObj
ks_get_has_tasks(self, closure)
ks_traverse110%int
ks_traverse(self, visit, arg)
ks_clear40%int
ks_clear(self)
ks_dealloc50%void
ks_dealloc(self)
ks_new250%PyObj
ks_new(subtype, args, kw)
TQ_LQUEUE_HAS_TASKS30%
TQ_LQUEUE_HAS_TASKS()
TQ_XQUEUE_HAS_TASKS
TQ_XQUEUE_HAS_TASKS()
TQ_HAS_TASKS
TQ_HAS_TASKS()
Tasks
A linked list of vectors used to manage the queue's storage.
Tasks()
A linked list of vectors used to manage the queue's storage.
A linked list of vectors used to manage the queue's storage.
Taskst_nextTasks
Taskst_allocatedint
Taskst_vectorint[0]
TaskQueue
TaskQueue()
TaskQueueq_executingstruct Tasks *
TaskQueueq_loadingstruct Tasks *
TaskQueueq_tailstruct Tasks *
TaskQueueq_tailcursorint
_SYSTEM_KERNEL_LINK_H_included_
#define _SYSTEM_KERNEL_LINK_H_included_
LinkFlag20%
LinkFlag()
Link_Get20%
Link_Get()
Link_Set20%
Link_Set()
Link_Clear20%
Link_Clear()
Link_Closed
Link_Closed()
LINK_FLAG_LIST
LINK_FLAG_LIST()
LinkFlags
LinkFlags()
The set of control flags used to identify the Link's state.
- lnf_cancelled
Whether or not the operation has been disconnected from events. Resources associated with the event may still be open.
- lnf_dispatched
Whether or not the operation has been scheduled with kernel.Scheduler.dispatch.
lnf_void
lnf_void()
lnf_cancelled
lnf_cancelled()
lnf_dispatched
lnf_dispatched()
lnf_executing
lnf_executing()
lnf_cyclic
lnf_cyclic()
Link
Link()
LinkPyObjint
Linkln_eventint
Linkln_taskint
Linkln_flagsint
CONFIG_STATIC_KEVENTS
#define CONFIG_STATIC_KEVENTS 16
CONFIG_SYSCALL_RETRY10%
#define CONFIG_SYSCALL_RETRY 16
__EV_KQUEUE__
__EV_KQUEUE__()
__EV_KQUEUE__()
__EV_EPOLL__
__EV_EPOLL__()
_SYSTEM_KERNEL_KERNELQ_H_included_
#define _SYSTEM_KERNEL_KERNELQ_H_included_
_RETRY_STATE10%
#define _RETRY_STATE _avail_retries
RETRY_STATE_INIT20%
#define RETRY_STATE_INIT int _RETRY_STATE = CONFIG_SYSCALL_RETRY
LIMITED_RETRY70%
LIMITED_RETRY()
UNLIMITED_RETRY
UNLIMITED_RETRY()
KernelQueue
KernelQueue()
KernelQueuekq_referencesint
KernelQueuekq_cancellationsint
KernelQueuekq_event_positionint
kport_t kq_root; // epoll and kqueue
KernelQueuekq_event_countint
kport_t kq_root; // epoll and kqueue
KernelQueuekq_arrayint
INITIAL_TASKS_ALLOCATED
#define INITIAL_TASKS_ALLOCATED 4
O_EVTONLY
#define O_EVTONLY O_RDONLY
KFILTER
#define KFILTER(B, TYP) case B: fname = #B; break;
FLAG
#define FLAG(FLG) "%s"
#define FLAG(FLG) (kev->flags & FLG) ? (#FLG "|") : "",
fs_event_open40%kport_t
fs_event_open(path, ev_type)
ev_type is ignored here as the subevent set is determined by kernelq_identify.
kernelq_delta360%int
kernelq_delta(kq, ctl, kp, event)
kernelq_identify720%int
kernelq_identify(kev, evs)
Interpret event_t for use with a kqueue filter.
kernelq_interrupt40%int
kernelq_interrupt(kq)
Called by kernel.Scheduler.interrupt.
kernelq_interrupt_accept10%int
kernelq_interrupt_accept(kq)
Nothing to do for kqueue.
kernelq_interrupt_setup60%int
kernelq_interrupt_setup(kq)
kevent_set_timer60%void
kevent_set_timer(kev, ns)
kernelq_schedule440%int
kernelq_schedule(kq, cyclic, ln)
Establish the link with the kernel event.
kernelq_default_flags50%int
kernelq_default_flags(kq)
kernelq_initialize190%int
kernelq_initialize(kq)
kernelq_close70%int
kernelq_close(kq)
Close the event queue kernel resources.
kernelq_closeReturns
Zero if already closed, one if resources were destroyed. Negative one if errno was set.
kernelq_receive180%int
kernelq_receive(kq, seconds, ns)
Receive events from the kernel. Retry logic is not desired here as the event loop will naturally try again.
pkevent10%void
pkevent(kev)