diff --git a/kernel-src/include/kernel/scheduler.h b/kernel-src/include/kernel/scheduler.h index bbd8144c..3f9ba62c 100644 --- a/kernel-src/include/kernel/scheduler.h +++ b/kernel-src/include/kernel/scheduler.h @@ -17,6 +17,8 @@ typedef struct thread_t { void *kernelstacktop; struct thread_t *next; struct thread_t *prev; + struct thread_t *sleepnext; + struct thread_t *sleepprev; struct proc_t *proc; struct cpu_t *cpu; context_t context; diff --git a/kernel-src/lib/semaphore.c b/kernel-src/lib/semaphore.c index 7b42e077..cdd9273d 100644 --- a/kernel-src/lib/semaphore.c +++ b/kernel-src/lib/semaphore.c @@ -6,24 +6,24 @@ static void insert(semaphore_t *sem, thread_t *thread) { if (sem->head == NULL) { sem->head = thread; sem->tail = thread; - thread->next = NULL; - thread->prev = NULL; + thread->sleepnext = NULL; + thread->sleepprev = NULL; return; } - sem->tail->next = _cpu()->thread; - _cpu()->thread->prev = sem->tail; + sem->tail->sleepnext = _cpu()->thread; + _cpu()->thread->sleepprev = sem->tail; } static thread_t *get(semaphore_t *sem) { thread_t *thread = sem->head; __assert(thread); - sem->head = sem->head->next; + sem->head = sem->head->sleepnext; if (sem->head == NULL) sem->tail = NULL; else - sem->head->prev = NULL; + sem->head->sleepprev = NULL; return thread; }