X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fthread.c;h=d38fd72183669741f8d2049d96e092e8ba36a904;hb=6a0601ab48635465ad3400c290e5cfbca28e5367;hp=650d5151059a96a753c0aa1db7695df3fc486666;hpb=71938e4be658b01c6aba3db5428a7ddce0dd48a2;p=sbcl.git diff --git a/src/runtime/thread.c b/src/runtime/thread.c index 650d515..d38fd72 100644 --- a/src/runtime/thread.c +++ b/src/runtime/thread.c @@ -91,6 +91,9 @@ pthread_mutex_t all_threads_lock = PTHREAD_MUTEX_INITIALIZER; #ifdef LOCK_CREATE_THREAD static pthread_mutex_t create_thread_lock = PTHREAD_MUTEX_INITIALIZER; #endif +#ifdef LISP_FEATURE_GCC_TLS +__thread struct thread *current_thread; +#endif #endif #if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) @@ -232,7 +235,6 @@ create_cleanup_thread(struct thread *thread_to_be_cleaned_up) (os_vm_address_t) thread_to_be_cleaned_up->os_address; result = pthread_create(&thread, NULL, cleanup_thread, freeable); gc_assert(result == 0); - sched_yield(); } } @@ -365,10 +367,6 @@ create_thread_struct(lispobj initial_function) { int i; #endif -#ifdef CREATE_CLEANUP_THREAD - /* Give a chance for cleanup threads to run. */ - sched_yield(); -#endif /* May as well allocate all the spaces at once: it saves us from * having to decide what to do if only some of the allocations * succeed. SPACES must be page-aligned, since the GC expects the @@ -519,7 +517,7 @@ boolean create_os_thread(struct thread *th,os_thread_t *kid_tid) pthread_attr_t attr; sigset_t newset,oldset; boolean r=1; - int retcode, initcode, sizecode, addrcode; + int retcode = 0, initcode; FSHOW_SIGNAL((stderr,"/create_os_thread: creating new thread\n")); @@ -548,7 +546,7 @@ boolean create_os_thread(struct thread *th,os_thread_t *kid_tid) #undef CONTROL_STACK_ADJUST (retcode = pthread_create (kid_tid,&attr,(void *(*)(void *))new_thread_trampoline,th))) { - FSHOW_SIGNAL((stderr, "init, size, addr = %d, %d, %d\n", initcode, sizecode, addrcode)); + FSHOW_SIGNAL((stderr, "init = %d\n", initcode)); FSHOW_SIGNAL((stderr, printf("pthread_create returned %d, errno %d\n", retcode, errno))); FSHOW_SIGNAL((stderr, "wanted stack size %d, min stack size %d\n", THREAD_CONTROL_STACK_SIZE-16, PTHREAD_STACK_MIN)); @@ -731,3 +729,13 @@ void gc_start_the_world() FSHOW_SIGNAL((stderr,"/gc_start_the_world:end\n")); } #endif + +int +thread_yield() +{ +#ifdef LISP_FEATURE_SB_THREAD + return sched_yield(); +#else + return 0; +#endif +}