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 struct user_thread* 16 get_user_thread() 17 { 18 return (struct 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 struct 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