From: Daniel B. <da...@us...> - 2003-01-23 00:25:20
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory sc8-pr-cvs1:/tmp/cvs-serv19937/src/runtime Modified Files: Tag: dan_native_threads_2_branch runtime.c x86-linux-os.c Log Message: 0.7.11.10.thread.5 Commit build-order.lisp-expr change missed last time Fasloader now surrounded by *big-compiler-lock* (it would be nice to use a second lock, but as compiler and fasloader are mutually recursive, probably asking for trouble) serve-event changes: *descriptor-handlers* now has thread-local binding - after all, so do the fds More fiddling with locks: whatever descriptor-sap does, "give the desired answer" is not it. So, use explicit shifts instead x86 linux version of arch_os_get_current_thread that references %gs, so avoiding use of a syscall. Index: runtime.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/runtime.c,v retrieving revision 1.17.4.4 retrieving revision 1.17.4.5 diff -u -d -r1.17.4.4 -r1.17.4.5 --- runtime.c 20 Jan 2003 12:58:51 -0000 1.17.4.4 +++ runtime.c 23 Jan 2003 00:25:16 -0000 1.17.4.5 @@ -363,6 +363,8 @@ sigaction(SIGALRM, &sa, 0); sigaction(SIGCHLD, &sa, 0); + /* renounce sin, the world, and a controlling tty */ + setsid(); while(all_threads) { int status; pid_t pid=0; Index: x86-linux-os.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-linux-os.c,v retrieving revision 1.7.8.1 retrieving revision 1.7.8.2 diff -u -d -r1.7.8.1 -r1.7.8.2 --- x86-linux-os.c 19 Jan 2003 19:46:30 -0000 1.7.8.1 +++ x86-linux-os.c 23 Jan 2003 00:25:16 -0000 1.7.8.2 @@ -15,8 +15,12 @@ */ #include <stdio.h> +#include <stddef.h> #include <sys/param.h> #include <sys/file.h> +#include <sys/types.h> +#include <unistd.h> + #include "./signal.h" #include "os.h" #include "arch.h" @@ -99,8 +103,16 @@ return (n>=0); } +/* if you can't do something like this (maybe because you're using a + * register for thread base that is only available in Lisp code) + * you'll just have to find_thread_by_pid(getpid()) + */ struct thread *arch_os_get_current_thread() { - return find_thread_by_pid(getpid()); + register struct thread *me=0; + if(all_threads) + __asm__ ("movl %%gs:%c1,%0" : "=r" (me) + : "i" (offsetof (struct thread,this))); + return me; } |