X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fthread.c;h=ffd14db15b551e3ecd9c82a9ea9ef393357e6fd8;hb=6b7b0266343826426a3efffa3b8b8d4d552f8f97;hp=1de8a200257e5f6c082154322398daaf4f2f00ce;hpb=629e57661251d3879177bcf52040d1380f7bbfe3;p=sbcl.git diff --git a/src/runtime/thread.c b/src/runtime/thread.c index 1de8a20..ffd14db 100644 --- a/src/runtime/thread.c +++ b/src/runtime/thread.c @@ -245,8 +245,9 @@ void destroy_thread (struct thread *th) all_threads_lock=0; if(th && th->tls_cookie>=0) arch_os_thread_cleanup(th); os_invalidate((os_vm_address_t) th->control_stack_start, - THREAD_CONTROL_STACK_SIZE+BINDING_STACK_SIZE+ - ALIEN_STACK_SIZE+dynamic_values_bytes+ + ((sizeof (lispobj)) + * (th->control_stack_end-th->control_stack_start)) + + BINDING_STACK_SIZE+ALIEN_STACK_SIZE+dynamic_values_bytes+ 32*SIGSTKSZ); } @@ -282,4 +283,12 @@ void unblock_sigcont_and_sleep(void) sigwaitinfo(&set,0); sigprocmask(SIG_UNBLOCK,&set,0); } + +int interrupt_thread(pid_t pid, lispobj function) +{ + union sigval sigval; + sigval.sival_int=function; + + sigqueue(pid, SIG_INTERRUPT_THREAD, sigval); +} #endif