From 436a1f065f6c994999bfc116fb90ae6af4aab608 Mon Sep 17 00:00:00 2001 From: jowenn Date: Sun, 23 Nov 2003 21:55:11 +0000 Subject: [PATCH] make threads work again (means, they don't crash anymore, just block the application), must have forgotten to commit/merge that --- src/threads/green/threads.c | 23 +++++++++--------- src/threads/green/threads.h | 47 +++++++++++++++---------------------- threads/thread.c | 23 +++++++++--------- threads/thread.h | 47 +++++++++++++++---------------------- 4 files changed, 62 insertions(+), 78 deletions(-) diff --git a/src/threads/green/threads.c b/src/threads/green/threads.c index f1a4c6da5..56fe80514 100644 --- a/src/threads/green/threads.c +++ b/src/threads/green/threads.c @@ -120,7 +120,7 @@ initThreads(u1 *stackbottom) thread *the_main_thread; int i; char mainname[] = "main"; - int len = strlen(mainname); + /*int len = strlen(mainname);*/ signal(SIGPIPE, SIG_IGN); @@ -153,11 +153,12 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout); the_main_thread->name = asm_calljavafunction (m, javastring_new(utf_new_char("main")), 0, 0, 0); } #endif - the_main_thread->name = builtin_newarray_char(len); + the_main_thread->name=javastring_new(utf_new_char(mainname)); +/* the_main_thread->name = builtin_newarray_char(len); { u2 *d = the_main_thread->name->data; for (i=0; ipriority = NORM_THREAD_PRIO; CONTEXT(the_main_thread).priority = (u1)the_main_thread->priority; CONTEXT(the_main_thread).exceptionptr = 0; @@ -174,14 +175,14 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout); CONTEXT(the_main_thread).flags = THREAD_FLAGS_NOSTACKALLOC; CONTEXT(the_main_thread).nextlive = 0; CONTEXT(the_main_thread).thread = the_main_thread; - the_main_thread->single_step = 0; + /*the_main_thread->single_step = 0;*/ the_main_thread->daemon = 0; - the_main_thread->stillborn = 0; - the_main_thread->target = 0; + /*the_main_thread->stillborn = 0;*/ + /*the_main_thread->target = 0;*/ the_main_thread->contextClassLoader = 0; - the_main_thread->inheritedAccessControlContext = 0; - the_main_thread->values = 0; + /*the_main_thread->inheritedAccessControlContext = 0;*/ + /*the_main_thread->values = 0;*/ /* Allocate and init ThreadGroup */ the_main_thread->group = (threadGroup*)native_new_and_init(loader_load(utf_new_char("java/lang/ThreadGroup"))); @@ -278,10 +279,10 @@ startDaemon(void* func, char* nm, int stackSize) CONTEXT(tid).status = THREAD_SUSPENDED; allocThreadStack(tid, stackSize); - tid->single_step = 0; + /*tid->single_step = 0;*/ tid->daemon = 1; - tid->stillborn = 0; - tid->target = 0; + /*tid->stillborn = 0;*/ + /*tid->target = 0;*/ tid->group = 0; /* Construct the initial restore point. */ diff --git a/src/threads/green/threads.h b/src/threads/green/threads.h index b85483cb2..2dd27bb3e 100644 --- a/src/threads/green/threads.h +++ b/src/threads/green/threads.h @@ -74,37 +74,28 @@ struct _object; /* This structure mirrors java.lang.ThreadGroup.h */ -typedef struct _threadGroup -{ - java_objectheader header; - struct _threadGroup* parent; - java_objectheader* name; - s4 maxPrio; - s4 destroyed; - s4 daemon; - s4 vmAllowSuspension; - s4 nthreads; - java_objectheader* threads; - s4 ngroups; - java_objectheader* groups; +typedef struct _threadGroup { + java_objectheader header; + struct _threadGroup* parent; + struct java_objectheader* name; + struct java_objectheader* threads; + struct java_objectheader* groups; + s4 daemon_flag; + s4 maxpri; } threadGroup; + /* This structure mirrors java.lang.Thread.h */ -typedef struct _thread -{ - java_objectheader header; - java_chararray* name; - s4 priority; - struct _thread* next; - s8 PrivateInfo; - s4 single_step; - s4 daemon; - s4 stillborn; - java_objectheader* target; - threadGroup* group; - java_objectheader* contextClassLoader; - java_objectheader* inheritedAccessControlContext; - java_objectheader* values; +typedef struct _thread { + java_objectheader header; + struct _threadGroup* group; + struct java_objectheader* toRun; + struct java_objectheader* name; + s8 PrivateInfo; + struct _thread* next; + s4 daemon; + s4 priority; + struct java_objectheader* contextClassLoader; } thread; void initThreads (u1 *stackbottom); diff --git a/threads/thread.c b/threads/thread.c index f1a4c6da5..56fe80514 100644 --- a/threads/thread.c +++ b/threads/thread.c @@ -120,7 +120,7 @@ initThreads(u1 *stackbottom) thread *the_main_thread; int i; char mainname[] = "main"; - int len = strlen(mainname); + /*int len = strlen(mainname);*/ signal(SIGPIPE, SIG_IGN); @@ -153,11 +153,12 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout); the_main_thread->name = asm_calljavafunction (m, javastring_new(utf_new_char("main")), 0, 0, 0); } #endif - the_main_thread->name = builtin_newarray_char(len); + the_main_thread->name=javastring_new(utf_new_char(mainname)); +/* the_main_thread->name = builtin_newarray_char(len); { u2 *d = the_main_thread->name->data; for (i=0; ipriority = NORM_THREAD_PRIO; CONTEXT(the_main_thread).priority = (u1)the_main_thread->priority; CONTEXT(the_main_thread).exceptionptr = 0; @@ -174,14 +175,14 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout); CONTEXT(the_main_thread).flags = THREAD_FLAGS_NOSTACKALLOC; CONTEXT(the_main_thread).nextlive = 0; CONTEXT(the_main_thread).thread = the_main_thread; - the_main_thread->single_step = 0; + /*the_main_thread->single_step = 0;*/ the_main_thread->daemon = 0; - the_main_thread->stillborn = 0; - the_main_thread->target = 0; + /*the_main_thread->stillborn = 0;*/ + /*the_main_thread->target = 0;*/ the_main_thread->contextClassLoader = 0; - the_main_thread->inheritedAccessControlContext = 0; - the_main_thread->values = 0; + /*the_main_thread->inheritedAccessControlContext = 0;*/ + /*the_main_thread->values = 0;*/ /* Allocate and init ThreadGroup */ the_main_thread->group = (threadGroup*)native_new_and_init(loader_load(utf_new_char("java/lang/ThreadGroup"))); @@ -278,10 +279,10 @@ startDaemon(void* func, char* nm, int stackSize) CONTEXT(tid).status = THREAD_SUSPENDED; allocThreadStack(tid, stackSize); - tid->single_step = 0; + /*tid->single_step = 0;*/ tid->daemon = 1; - tid->stillborn = 0; - tid->target = 0; + /*tid->stillborn = 0;*/ + /*tid->target = 0;*/ tid->group = 0; /* Construct the initial restore point. */ diff --git a/threads/thread.h b/threads/thread.h index b85483cb2..2dd27bb3e 100644 --- a/threads/thread.h +++ b/threads/thread.h @@ -74,37 +74,28 @@ struct _object; /* This structure mirrors java.lang.ThreadGroup.h */ -typedef struct _threadGroup -{ - java_objectheader header; - struct _threadGroup* parent; - java_objectheader* name; - s4 maxPrio; - s4 destroyed; - s4 daemon; - s4 vmAllowSuspension; - s4 nthreads; - java_objectheader* threads; - s4 ngroups; - java_objectheader* groups; +typedef struct _threadGroup { + java_objectheader header; + struct _threadGroup* parent; + struct java_objectheader* name; + struct java_objectheader* threads; + struct java_objectheader* groups; + s4 daemon_flag; + s4 maxpri; } threadGroup; + /* This structure mirrors java.lang.Thread.h */ -typedef struct _thread -{ - java_objectheader header; - java_chararray* name; - s4 priority; - struct _thread* next; - s8 PrivateInfo; - s4 single_step; - s4 daemon; - s4 stillborn; - java_objectheader* target; - threadGroup* group; - java_objectheader* contextClassLoader; - java_objectheader* inheritedAccessControlContext; - java_objectheader* values; +typedef struct _thread { + java_objectheader header; + struct _threadGroup* group; + struct java_objectheader* toRun; + struct java_objectheader* name; + s8 PrivateInfo; + struct _thread* next; + s4 daemon; + s4 priority; + struct java_objectheader* contextClassLoader; } thread; void initThreads (u1 *stackbottom); -- 2.25.1