X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.c;h=620e7b6a0dc88050361ee8efd4e23dece28ce1c5;hb=65a01dae3d437a48e8dd0d051a446245f9e29929;hp=e3e11bc0c00d18e017818ba8652f1f01fc174248;hpb=e365f2f7a9c66d307b48fee70778f4eaa84bdcc0;p=sbcl.git diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index e3e11bc..620e7b6 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -384,7 +384,6 @@ static void parent_do_garbage_collect(void) for_each_thread(th) { if(ptrace(PTRACE_ATTACH,th->pid,0,0)) { - fprintf(stderr,"attaching to %d ...",th->pid); perror("PTRACE_ATTACH"); } else waiting_threads++; @@ -421,7 +420,7 @@ static void parent_do_garbage_collect(void) * event to wait for */ fprintf(stderr, "%d was pseudo-atomic, letting it resume \n", th->pid); - SetTlSymbolValue(PSEUDO_ATOMIC_INTERRUPTED,1,th) ; + SetTlSymbolValue(PSEUDO_ATOMIC_INTERRUPTED,make_fixnum(1),th); if(ptrace(PTRACE_CONT,th->pid,0,0)) perror("PTRACE_CONT"); waiting_threads++; @@ -461,11 +460,14 @@ static void /* noreturn */ parent_loop(void) sa.sa_flags=0; sigaction(SIGINT, &sa, 0); + while(!all_threads) { + sched_yield(); + } + while(all_threads) { pid_t pid=0; while(pid=waitpid(-1,&status,__WALL|WUNTRACED)) { struct thread *th; - fprintf(stderr,"waitpid pid %d\n",pid); if(pid==-1) { if(errno == EINTR) { if(maybe_gc_pending) parent_do_garbage_collect();