The Pedigree Project
0.1
src
modules
subsys
posix
trace-context.h
1
/* Copyright (c) 2026, Pedigree Developers. */
2
#ifndef PEDIGREE_POSIX_TRACE_CONTEXT_H
3
#define PEDIGREE_POSIX_TRACE_CONTEXT_H
4
5
#include "pedigree/kernel/process/Mutex.h"
6
#include "pedigree/kernel/process/Process.h"
7
8
#include "trace-state.h"
9
10
class
EXPORTED_PUBLIC
PreparedTraceTask
{
11
public
:
12
PreparedTraceTask
() =
default
;
13
~PreparedTraceTask
() =
default
;
14
15
private
:
16
friend
class
PosixTraceContext
;
17
PreparedTraceTask
(
const
PreparedTraceTask
&) =
delete
;
18
PreparedTraceTask
& operator=(
const
PreparedTraceTask
&) =
delete
;
19
TraceTaskRef
m_Token;
20
PreparedTraceTask
* m_Next =
nullptr
;
21
};
22
23
// Declare inside the existing Process::ThreadCreationScope lifetime.
24
class
EXPORTED_PUBLIC
TraceCloneAdmission
{
25
public
:
26
TraceCloneAdmission
() =
default
;
27
~TraceCloneAdmission
();
28
29
private
:
30
friend
class
PosixTraceContext
;
31
TraceCloneAdmission
(
const
TraceCloneAdmission
&) =
delete
;
32
TraceCloneAdmission
& operator=(
const
TraceCloneAdmission
&) =
delete
;
33
PosixTraceContext
* m_Context =
nullptr
;
34
};
35
36
// Caller defers events through enrollment and core frame-flag publication.
37
class
EXPORTED_PUBLIC
TraceEnrollmentAdmission
{
38
public
:
39
TraceEnrollmentAdmission
() =
default
;
40
~TraceEnrollmentAdmission
();
41
const
TraceTaskRef
& tracer()
const
{
42
return
m_Tracer;
43
}
44
const
TraceTaskRef
& tracee()
const
{
45
return
m_Tracee;
46
}
47
48
private
:
49
friend
class
PosixTraceContext
;
50
TraceEnrollmentAdmission
(
const
TraceEnrollmentAdmission
&) =
delete
;
51
TraceEnrollmentAdmission
& operator=(
const
TraceEnrollmentAdmission
&) =
delete
;
52
PosixTraceContext
* m_Context =
nullptr
;
53
TraceTaskRef
m_Tracer, m_Tracee;
54
};
55
56
class
EXPORTED_PUBLIC
PosixTraceContext
{
57
public
:
58
PosixTraceContext
() =
default
;
59
~PosixTraceContext
();
60
bool
valid()
const
;
61
void
attach(
Process
&);
62
TraceStatus prepareTask(
UniquePointer<PreparedTraceTask>
&);
63
TraceStatus publishTask(
UniquePointer<PreparedTraceTask>
&,
Thread
&);
64
bool
taskToken(
const
Thread
&,
TraceTaskRef
&)
const
;
65
void
setCreator(
const
TraceTaskRef
&);
66
TraceTaskRef
creator
()
const
;
67
void
promoteExec(
const
Thread
&);
68
void
retireTask(
const
Thread
&);
69
void
close();
70
71
TraceStatus reserveThreadCreation(
TraceCloneAdmission
&);
72
TraceStatus reserveEnrollment(
Thread
&,
TraceEnrollmentAdmission
&);
73
TraceStatus commitEnrollment(
TraceEnrollmentAdmission
&,
const
TraceRelationRef
&);
74
TraceStatus registerTracee(
const
TraceTaskRef
& tracer,
const
TraceRelationRef
&);
75
void
unregisterTracee(
const
PosixTraceRelation
*);
76
void
clearIncoming(
const
PosixTraceRelation
*);
77
// Output must be empty and declared outside any parent child-state guard.
78
// Only a short spin guard is taken; release the reference after that guard.
79
bool
acquireIncoming(
TraceRelationRef
& empty)
const
;
80
bool
selectStop(
size_t
parentPid,
bool
stopped,
bool
continued,
bool
consume,
PosixWait::Report
&);
81
82
private
:
83
friend
class
TraceCloneAdmission
;
84
friend
class
TraceEnrollmentAdmission
;
85
PosixTraceContext
(
const
PosixTraceContext
&) =
delete
;
86
PosixTraceContext
& operator=(
const
PosixTraceContext
&) =
delete
;
87
struct
OwnedRelation
{
88
TraceRelationRef
relation;
89
OwnedRelation
* next =
nullptr
;
90
};
91
TraceTaskRef
tokenUnlocked(
size_t
localId)
const
;
92
bool
ownsTokenUnlocked(
const
TraceTaskRef
&)
const
;
93
void
finishThreadCreation();
94
void
cancelEnrollment();
95
bool
hasIncoming()
const
;
96
mutable
Mutex
m_AdmissionLock;
97
mutable
Spinlock
m_RelationLock;
98
bool
m_Attached =
false
, m_Closed =
false
;
99
size_t
m_ProcessId = 0, m_ThreadCreations = 0;
100
bool
m_EnrollmentPending =
false
;
101
PreparedTraceTask
* m_Tasks =
nullptr
;
102
OwnedRelation
* m_Outgoing =
nullptr
;
103
TraceTaskRef
m_Creator;
104
TraceRelationRef
m_Incoming;
105
};
106
107
// No lock from either context/token may be held by callers. Output starts empty.
108
EXPORTED_PUBLIC TraceStatus posix_trace_acquire_task(
const
TraceTaskRef
&,
Process::ThreadLease
&);
109
#endif
Mutex
Definition
Mutex.h:56
PosixTraceContext
Definition
trace-context.h:56
PosixTraceRelation
Definition
trace-state.h:19
PreparedTraceTask
Definition
trace-context.h:10
Process::ThreadLease
Definition
Process.h:152
Process
Definition
Process.h:72
SharedPointer< TraceTaskToken >
Spinlock
Definition
Spinlock.h:27
Thread
Definition
Thread.h:75
TraceCloneAdmission
Definition
trace-context.h:24
TraceEnrollmentAdmission
Definition
trace-context.h:37
UniquePointer
Definition
Pointers.h:79
PosixTraceContext::OwnedRelation
Definition
trace-context.h:87
PosixWait::Report
Definition
wait-state.h:21
creator
Definition
ownership.c:74
Generated on Thu Sep 24 2026 06:23:59 for The Pedigree Project by
1.9.8