summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2011-04-27 09:27:10 -0700
committerH. Peter Anvin <hpa@zytor.com>2011-04-27 09:27:10 -0700
commite0d9a80bd9690cdd4fc6c13c7eebe11cb26bf53e (patch)
tree3c1783e67380d235a7123216be439ca5bbefa673
parent7dfe5f27a0fc56ba3da0e300043731af0bdf13de (diff)
downloadsyslinux-e0d9a80bd9690cdd4fc6c13c7eebe11cb26bf53e.tar.gz
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 <hpa@zytor.com>
-rw-r--r--core/include/thread.h12
-rw-r--r--core/thread/kill_thread.c2
-rw-r--r--core/thread/start_thread.c10
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)
{