From e0d9a80bd9690cdd4fc6c13c7eebe11cb26bf53e Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Wed, 27 Apr 2011 09:27:10 -0700 Subject: thread: make kill_thread() actually do its job kill_thread() had been modifying errno(!) as if it had been the return value... in other words, it really did absolutely nothing. Signed-off-by: H. Peter Anvin --- core/include/thread.h | 12 +++++++++++- core/thread/kill_thread.c | 2 +- core/thread/start_thread.c | 10 ---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/include/thread.h b/core/include/thread.h index be3844af..44084ff3 100644 --- a/core/include/thread.h +++ b/core/include/thread.h @@ -19,6 +19,16 @@ struct thread_list { struct thread_list *next, *prev; }; +/* + * Stack frame used by __switch_to, see thread_asm.S + */ +struct thread_stack { + int errno; + uint16_t rmsp, rmss; + uint32_t edi, esi, ebp, ebx; + void (*eip)(void); +}; + struct thread_block { struct thread_list list; struct thread *thread; @@ -29,7 +39,7 @@ struct thread_block { }; struct thread { - void *esp; /* Must be first; stack pointer */ + struct thread_stack *esp; /* Must be first; stack pointer */ const char *name; /* Name (for debugging) */ struct thread_list list; struct thread_block *blocked; diff --git a/core/thread/kill_thread.c b/core/thread/kill_thread.c index 83accee6..c22517c6 100644 --- a/core/thread/kill_thread.c +++ b/core/thread/kill_thread.c @@ -18,7 +18,7 @@ void kill_thread(struct thread *thread) * Muck with the stack so that the next time the thread is run then * we end up going to __exit_thread. */ - *(func_ptr *)thread->esp = __exit_thread; + thread->esp->eip = __exit_thread; thread->prio = INT_MIN; block = thread->blocked; diff --git a/core/thread/start_thread.c b/core/thread/start_thread.c index dd2a4de1..328d6e7b 100644 --- a/core/thread/start_thread.c +++ b/core/thread/start_thread.c @@ -8,16 +8,6 @@ extern void __start_thread(void); -/* - * Stack frame used by __switch_to, see thread_asm.S - */ -struct thread_stack { - int errno; - uint16_t rmsp, rmss; - uint32_t edi, esi, ebp, ebx; - void (*eip)(void); -}; - struct thread *start_thread(const char *name, size_t stack_size, int prio, void (*start_func)(void *), void *func_arg) { -- cgit v1.2.1