Index: kaffe/kaffevm/kaffe-gc/gc-refs.c =================================================================== RCS file: /cvs/kaffe/kaffe/kaffe/kaffevm/kaffe-gc/gc-refs.c,v retrieving revision 1.7 diff -u -r1.7 gc-refs.c --- kaffe/kaffevm/kaffe-gc/gc-refs.c 19 Dec 2004 06:41:29 -0000 1.7 +++ kaffe/kaffevm/kaffe-gc/gc-refs.c 20 Dec 2004 11:13:37 -0000 @@ -156,6 +156,12 @@ threadData *thread_data = KTHREAD(get_data)(tid); Hjava_lang_VMThread *thread = (Hjava_lang_VMThread *)thread_data->jlThread; + /* if the gc is invoked while a new thread is being + * initialized, we better skip that thread. + */ + if (!THREAD_DATA_INITIALIZED(thread_data)) + return; + KGC_markObject(c, NULL, unhand(thread)->thread); KGC_markObject(c, NULL, thread); Index: kaffe/kaffevm/threadData.h =================================================================== RCS file: /cvs/kaffe/kaffe/kaffe/kaffevm/threadData.h,v retrieving revision 1.4 diff -u -r1.4 threadData.h --- kaffe/kaffevm/threadData.h 7 Jul 2004 16:05:13 -0000 1.4 +++ kaffe/kaffevm/threadData.h 20 Dec 2004 11:13:37 -0000 @@ -38,4 +38,6 @@ int needOnStack; } threadData; +#define THREAD_DATA_INITIALIZED(td) ((td)->jniEnv != NULL) + #endif