X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fthread.c;h=8d3d36a6e6887e55b08168d245e2fb931815289b;hb=427cac784579a935a06b0d66bac63dbf9bf325a4;hp=ef73bafb0f9faec5816a495b05ae85fe78062ef1;hpb=47cef18a20fc96975436432bfd167be8c13407ef;p=sbcl.git diff --git a/src/runtime/thread.c b/src/runtime/thread.c index ef73baf..8d3d36a 100644 --- a/src/runtime/thread.c +++ b/src/runtime/thread.c @@ -1,14 +1,30 @@ +/* + * This software is part of the SBCL system. See the README file for + * more information. + * + * This software is derived from the CMU CL system, which was + * written at Carnegie Mellon University and released into the + * public domain. The software is in the public domain and is + * provided with absolutely no warranty. See the COPYING and CREDITS + * files for more information. + */ + +#include "sbcl.h" + #include #include #include +#ifndef LISP_FEATURE_WIN32 #include +#endif #include #include #include #include +#ifndef LISP_FEATURE_WIN32 #include +#endif -#include "sbcl.h" #include "runtime.h" #include "validate.h" /* for CONTROL_STACK_SIZE etc */ #include "alloc.h" @@ -23,6 +39,14 @@ #include "interr.h" /* for lose() */ #include "gc-internal.h" +#ifdef LISP_FEATURE_WIN32 +/* + * Win32 doesn't have SIGSTKSZ, and we're not switching stacks anyway, + * so define it arbitrarily + */ +#define SIGSTKSZ 1024 +#endif + #define ALIEN_STACK_SIZE (1*1024*1024) /* 1Mb size chosen at random */ struct freeable_stack { @@ -38,15 +62,13 @@ extern struct interrupt_data * global_interrupt_data; extern int linux_no_threads_p; #ifdef LISP_FEATURE_SB_THREAD - pthread_mutex_t all_threads_lock = PTHREAD_MUTEX_INITIALIZER; +#endif #if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) extern lispobj call_into_lisp_first_time(lispobj fun, lispobj *args, int nargs); #endif -#endif - static void link_thread(struct thread *th) { @@ -213,6 +235,7 @@ create_thread_struct(lispobj initial_function) { if(SymbolValue(FREE_TLS_INDEX,0)==UNBOUND_MARKER_WIDETAG) { SetSymbolValue (FREE_TLS_INDEX, + /* FIXME: should be MAX_INTERRUPTS -1 ? */ make_fixnum(MAX_INTERRUPTS+ sizeof(struct thread)/sizeof(lispobj)), 0); @@ -305,7 +328,7 @@ void create_initial_thread(lispobj initial_function) { struct thread *th=create_thread_struct(initial_function); if(th) { initial_thread_trampoline(th); /* no return */ - } else lose("can't create initial thread"); + } else lose("can't create initial thread\n"); } #ifdef LISP_FEATURE_SB_THREAD @@ -389,7 +412,7 @@ int signal_interrupt_thread(os_thread_t os_thread) } else if (status == ESRCH) { return -1; } else { - lose("cannot send SIG_INTERRUPT_THREAD to thread=%lu: %d, %s", + lose("cannot send SIG_INTERRUPT_THREAD to thread=%lu: %d, %s\n", os_thread, status, strerror(status)); } } @@ -424,7 +447,7 @@ void gc_stop_the_world() /* This thread has exited. */ gc_assert(p->state==STATE_DEAD); } else if (status) { - lose("cannot send suspend thread=%lu: %d, %s", + lose("cannot send suspend thread=%lu: %d, %s\n", p->os_thread,status,strerror(status)); } } @@ -462,7 +485,7 @@ void gc_start_the_world() p->state=STATE_RUNNING; status=kill_thread_safely(p->os_thread,SIG_STOP_FOR_GC); if (status) { - lose("cannot resume thread=%lu: %d, %s", + lose("cannot resume thread=%lu: %d, %s\n", p->os_thread,status,strerror(status)); } }