Changeset 13970
- Timestamp:
- Jul 17, 2010, 3:17:32 AM (14 years ago)
- Location:
- trunk/source/lisp-kernel
- Files:
-
- 5 edited
-
imports.s (modified) (1 diff)
-
lisp.h (modified) (1 diff)
-
pmcl-kernel.c (modified) (4 diffs)
-
ppc-exceptions.c (modified) (4 diffs)
-
x86-exceptions.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/lisp-kernel/imports.s
r13337 r13970 49 49 defimport(allocate) 50 50 defimport(deallocate) 51 defimport( jvm_init)51 defimport(wait_for_signal) 52 52 defimport(tcr_frame_ptr) 53 53 defimport(register_xmacptr_dispose_function) -
trunk/source/lisp-kernel/lisp.h
r13627 r13970 95 95 extern FILE *dbgout; 96 96 97 void 98 install_signal_handler(int, void*, Boolean); 99 97 100 #endif /* __lisp__ */ -
trunk/source/lisp-kernel/pmcl-kernel.c
r13954 r13970 757 757 } 758 758 759 760 761 759 #ifndef WINDOWS 760 natural user_signal_semaphores[NSIG]; 761 sigset_t user_signals_reserved; 762 #endif 763 764 765 766 #ifndef WINDOWS 762 767 void 763 768 user_signal_handler (int signum, siginfo_t *info, ExceptionInformation *context) 764 769 { 765 if (signum == SIGINT) { 770 SEMAPHORE s = (SEMAPHORE)user_signal_semaphores[signum]; 771 772 if (s != 0) { 773 signal_semaphore(s); 774 } 775 else if (signum == SIGINT) { 766 776 lisp_global(INTFLAG) = (((signum<<8) + 1) << fixnumshift); 767 777 } … … 779 789 #endif 780 790 791 781 792 void 782 793 register_user_signal_handler() … … 789 800 SetConsoleCtrlHandler(ControlEventHandler,TRUE); 790 801 #else 791 install_signal_handler(SIGINT, (void *)user_signal_handler); 792 install_signal_handler(SIGTERM, (void *)user_signal_handler); 793 #endif 794 } 795 796 802 install_signal_handler(SIGINT, (void *)user_signal_handler, false); 803 install_signal_handler(SIGTERM, (void *)user_signal_handler, false); 804 install_signal_handler(SIGQUIT, (void *)user_signal_handler, false); 805 #endif 806 } 807 808 int 809 wait_for_signal(int signo, int seconds, int milliseconds) 810 { 811 #ifdef WINDOWS 812 return EINVAL; 813 #else 814 if ((signo <= 0) || (signo >= NSIG)) { 815 return EINVAL; 816 } 817 if (sigismember(&user_signals_reserved,signo)) { 818 return EINVAL; 819 } 820 if (user_signal_semaphores[signo] == 0) { 821 user_signal_semaphores[signo] = (natural)new_semaphore(0); 822 install_signal_handler(signo,(void *)user_signal_handler, false); 823 } 824 return wait_on_semaphore((void *)user_signal_semaphores[signo],seconds,milliseconds); 825 #endif 826 } 797 827 798 828 BytePtr … … 2122 2152 } 2123 2153 2124 /* A horrible hack to allow us to initialize a JVM instance from lisp.2125 On Darwin, creating a JVM instance clobbers the thread's existing2126 Mach exception infrastructure, so we save and restore it here.2127 */2128 2129 typedef int (*jvm_initfunc)(void*,void*,void*);2130 2131 int2132 jvm_init(jvm_initfunc f,void*arg0,void*arg1,void*arg2)2133 {2134 int result = -1;2135 TCR *tcr = get_tcr(1);2136 #ifdef DARWIN2137 extern kern_return_t tcr_establish_lisp_exception_port(TCR *);2138 #endif2139 2140 result = f(arg0,arg1,arg2);2141 #ifdef DARWIN2142 tcr_establish_lisp_exception_port(tcr);2143 #endif2144 return result;2145 }2146 2147 2154 2148 2155 -
trunk/source/lisp-kernel/ppc-exceptions.c
r13295 r13970 2209 2209 2210 2210 void 2211 install_signal_handler(int signo, void *handler )2211 install_signal_handler(int signo, void *handler, Boolean system) 2212 2212 { 2213 2213 struct sigaction sa; … … 2226 2226 2227 2227 sigaction(signo, &sa, NULL); 2228 if (system) { 2229 extern sigset_t user_signals_reserved; 2230 sigaddset(&user_signals_reserved, signo); 2231 } 2232 2228 2233 } 2229 2234 … … 2244 2249 if (install_signal_handlers_for_exceptions) { 2245 2250 extern int no_sigtrap; 2246 install_signal_handler(SIGILL, (void *)signal_handler );2251 install_signal_handler(SIGILL, (void *)signal_handler, true); 2247 2252 if (no_sigtrap != 1) { 2248 install_signal_handler(SIGTRAP, (void *)signal_handler );2249 } 2250 install_signal_handler(SIGBUS, (void *)signal_handler );2251 install_signal_handler(SIGSEGV, (void *)signal_handler );2252 install_signal_handler(SIGFPE, (void *)signal_handler );2253 install_signal_handler(SIGTRAP, (void *)signal_handler, true); 2254 } 2255 install_signal_handler(SIGBUS, (void *)signal_handler, true); 2256 install_signal_handler(SIGSEGV, (void *)signal_handler, true); 2257 install_signal_handler(SIGFPE, (void *)signal_handler, true); 2253 2258 } 2254 2259 2255 2260 install_signal_handler(SIGNAL_FOR_PROCESS_INTERRUPT, 2256 (void *)interrupt_handler );2261 (void *)interrupt_handler, true); 2257 2262 signal(SIGPIPE, SIG_IGN); 2258 2263 } … … 2293 2298 thread_kill_signal = SIG_KILL_THREAD; 2294 2299 2295 install_signal_handler(thread_suspend_signal, (void *) suspend_resume_handler );2296 install_signal_handler(thread_kill_signal, (void *)thread_kill_handler );2300 install_signal_handler(thread_suspend_signal, (void *) suspend_resume_handler, true); 2301 install_signal_handler(thread_kill_signal, (void *)thread_kill_handler, tru); 2297 2302 } 2298 2303 -
trunk/source/lisp-kernel/x86-exceptions.c
r13952 r13970 1860 1860 #ifndef WINDOWS 1861 1861 void 1862 install_signal_handler(int signo, void * handler )1862 install_signal_handler(int signo, void * handler, Boolean system) 1863 1863 { 1864 1864 struct sigaction sa; … … 1878 1878 1879 1879 sigaction(signo, &sa, NULL); 1880 if (system) { 1881 extern sigset_t user_signals_reserved; 1882 sigaddset(&user_signals_reserved, signo); 1883 } 1880 1884 } 1881 1885 #endif … … 2093 2097 #endif 2094 2098 ; 2095 install_signal_handler(SIGILL, handler );2099 install_signal_handler(SIGILL, handler, true); 2096 2100 2097 install_signal_handler(SIGBUS, handler );2098 install_signal_handler(SIGSEGV,handler );2099 install_signal_handler(SIGFPE, handler );2101 install_signal_handler(SIGBUS, handler, true); 2102 install_signal_handler(SIGSEGV,handler, true); 2103 install_signal_handler(SIGFPE, handler, true); 2100 2104 #endif 2101 2105 … … 2106 2110 arbstack_interrupt_handler 2107 2111 #endif 2108 );2112 ,true); 2109 2113 signal(SIGPIPE, SIG_IGN); 2110 2114 } … … 2300 2304 thread_kill_signal = SIG_KILL_THREAD; 2301 2305 2302 install_signal_handler(thread_suspend_signal, (void *)SUSPEND_RESUME_HANDLER );2303 install_signal_handler(thread_kill_signal, (void *)THREAD_KILL_HANDLER );2306 install_signal_handler(thread_suspend_signal, (void *)SUSPEND_RESUME_HANDLER, true); 2307 install_signal_handler(thread_kill_signal, (void *)THREAD_KILL_HANDLER, true); 2304 2308 } 2305 2309 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
