The Pedigree Project 0.1
trace-task-token.h
1/* Copyright (c) 2026, Pedigree Developers. */
2#ifndef PEDIGREE_POSIX_TRACE_TASK_TOKEN_H
3#define PEDIGREE_POSIX_TRACE_TASK_TOKEN_H
4
5#include "pedigree/kernel/Spinlock.h"
6#include "pedigree/kernel/compiler.h"
7#include "pedigree/kernel/processor/types.h"
8#include "pedigree/kernel/utilities/SharedPointer.h"
9
11class Thread;
12
13enum class TraceStatus {
14 Success,
15 Missing,
16 Denied,
17 Busy,
18 Unsupported,
19 NoMemory,
20 Invalid,
21 Full,
22 NotStopped
23};
24
25class EXPORTED_PUBLIC TraceTaskToken {
26 public:
27 enum class State { Staged, Live, Closed };
28 struct Snapshot {
29 State state = State::Staged;
30 size_t processId = 0, localThreadId = 0, linuxTaskId = 0;
31 };
32 TraceTaskToken() = default;
33 Snapshot snapshot() const;
34 bool live() const;
35
36 private:
37 friend class PosixTraceContext;
38 TraceTaskToken(const TraceTaskToken&) = delete;
39 TraceTaskToken& operator=(const TraceTaskToken&) = delete;
40 void publish(const Thread&);
41 void promote(const Thread&);
42 void close();
43 mutable Spinlock m_Lock;
44 Snapshot m_Identity;
45};
47#endif