BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 6063f6693644654ed3fe8ed5c6ca6be311696132 / include / nucleus

// Related

Nucleus

Barry Fixed scheduler double-schedule bug 6063f66 (3 years, 2 months ago)
diff --git a/include/nucleus/task.h b/include/nucleus/task.h
index 5c3d606..17b5c09 100644
--- a/include/nucleus/task.h
+++ b/include/nucleus/task.h
@@ -39,7 +39,7 @@ struct Task {
 	enum Priority priority;
 	enum State state;
 	uint32_t inCriticalSection;
-	uint8_t inSyscall;
+	uint32_t inSyscall;
 
 	uintptr_t esi, edi, ebx;
 	uintptr_t esp, ebp, eip;
@@ -83,8 +83,24 @@ exit_critical_section(void)
 	__atomic_sub_fetch(&current->inCriticalSection, 1, __ATOMIC_RELAXED);
 }
 
+/* Enter system call context */
+static inline void
+enter_syscall_context(uint32_t syscall)
+{
+	current->inSyscall = syscall;
+}
+/* Exit system call context */
+static inline uint32_t
+exit_syscall_context(void)
+{
+	uint32_t syscall = current->inSyscall;
+	current->inSyscall = 0;
+	return syscall;
+}
+
 void init_tasking(void);
 void block_task(enum State reason, ObjectList *list);
+void unblock_task(Task *task);
 Task *find_task(pid_t tid);
 void schedule(void);
 pid_t clone(int flags);