xref: /haiku/headers/private/libroot/user_thread.h (revision bc3955fea5b07e2e94a27fc05e4bb58fe6f0319b)
1 /*
2  * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _LIBROOT_USER_THREAD_H
6 #define _LIBROOT_USER_THREAD_H
7 
8 #include <OS.h>
9 #include <TLS.h>
10 
11 #include <tls.h>
12 #include <user_thread_defs.h>
13 
14 
15 static inline user_thread*
16 get_user_thread()
17 {
18 	return (user_thread*)tls_get(TLS_USER_THREAD_SLOT);
19 }
20 
21 
22 static void inline
23 defer_signals()
24 {
25 	get_user_thread()->defer_signals++;
26 }
27 
28 
29 static void inline
30 undefer_signals()
31 {
32 	user_thread* thread = get_user_thread();
33 	if (--thread->defer_signals == 0 && thread->pending_signals != 0) {
34 		// signals shall no longer be deferred -- call a dummy syscall to handle
35 		// the pending ones
36 		is_computer_on();
37 	}
38 }
39 
40 
41 #endif	/* _LIBROOT_USER_THREAD_H */
42