xref: /haiku/headers/private/kernel/UserEvent.h (revision a07cdb6e9f8e484b6ba9f209fbeb144e906d3405)
1 /*
2  * Copyright 2014, Paweł Dziepak, pdziepak@quarnos.org.
3  * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
4  * Distributed under the terms of the MIT License.
5  */
6 #ifndef _KERNEL_USER_EVENT_H
7 #define _KERNEL_USER_EVENT_H
8 
9 
10 #include <signal.h>
11 
12 #include <SupportDefs.h>
13 
14 #include <DPC.h>
15 #include <thread.h>
16 
17 
18 namespace BKernel {
19 
20 
21 struct Team;
22 struct Thread;
23 
24 
25 struct UserEvent : public BReferenceable {
26 	virtual						~UserEvent();
27 
28 	virtual	status_t			Fire() = 0;
29 };
30 
31 
32 struct SignalEvent : UserEvent, private DPCCallback {
33 	virtual						~SignalEvent();
34 
35 			void				SetUserValue(union sigval userValue);
36 
37 	virtual	status_t			Fire();
38 
39 protected:
40 			struct EventSignal;
41 
42 protected:
43 								SignalEvent(EventSignal* signal);
44 
45 protected:
46 			EventSignal*		fSignal;
47 			int32				fPendingDPC;
48 };
49 
50 
51 struct TeamSignalEvent : SignalEvent {
52 	static	TeamSignalEvent*	Create(Team* team, uint32 signalNumber,
53 									int32 signalCode, int32 errorCode);
54 
55 protected:
56 	virtual	void				DoDPC(DPCQueue* queue);
57 
58 private:
59 								TeamSignalEvent(Team* team,
60 									EventSignal* signal);
61 
62 private:
63 			Team*				fTeam;
64 };
65 
66 
67 struct ThreadSignalEvent : SignalEvent {
68 	static	ThreadSignalEvent*	Create(Thread* thread, uint32 signalNumber,
69 									int32 signalCode, int32 errorCode,
70 									pid_t sendingTeam);
71 
72 protected:
73 	virtual	void				DoDPC(DPCQueue* queue);
74 
75 private:
76 								ThreadSignalEvent(Thread* thread,
77 									EventSignal* signal);
78 
79 private:
80 			Thread*				fThread;
81 };
82 
83 
84 struct CreateThreadEvent : UserEvent, private DPCCallback {
85 								~CreateThreadEvent();
86 
87 	static	CreateThreadEvent*	Create(
88 									const ThreadCreationAttributes& attributes);
89 
90 	virtual	status_t			Fire();
91 
92 private:
93 								CreateThreadEvent(
94 									const ThreadCreationAttributes& attributes);
95 
96 	virtual	void				DoDPC(DPCQueue* queue);
97 
98 private:
99 			ThreadCreationAttributes fCreationAttributes;
100 			char				fThreadName[B_OS_NAME_LENGTH];
101 			int32				fPendingDPC;
102 };
103 
104 
105 }	// namespace BKernel
106 
107 
108 using BKernel::CreateThreadEvent;
109 using BKernel::SignalEvent;
110 using BKernel::TeamSignalEvent;
111 using BKernel::ThreadSignalEvent;
112 using BKernel::UserEvent;
113 
114 
115 #endif	// _KERNEL_USER_EVENT_H
116