X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fthreads.c;h=280f7f286cd20cca9bce0796d0b3f60e6b23cf2e;hb=8e5eb8fa755effc602bd44dc7fcdf57942609ae0;hp=50889bffcefe2b8eeb7a0a52248e82533e3ed153;hpb=a508bd147b638786d1f45869d41cfeb57f3fbedb;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/threads.c b/KernelLand/Kernel/threads.c index 50889bff..280f7f28 100644 --- a/KernelLand/Kernel/threads.c +++ b/KernelLand/Kernel/threads.c @@ -1116,22 +1116,41 @@ void Threads_SetSignalHandler(int SignalNum, void *Handler) } /** - * \return 0 Ignore + * \brief Gets the registered (or default, if none set) handler for a signal. + * \return Handler function pointer, OR NULL if no signal to be ignored */ void *Threads_GetSignalHandler(int SignalNum) { + // TODO: Core dump + void *User_Signal_Core = User_Signal_Kill; + if( SignalNum <= 0 || SignalNum >= NSIGNALS ) return NULL; void *ret = Proc_GetCurThread()->Process->SignalHandlers[SignalNum]; - if( !ret ) + if( !ret || (SignalNum == SIGKILL || SignalNum == SIGSTOP) ) { // Defaults switch(SignalNum) { + case SIGHUP: case SIGINT: + ret = User_Signal_Kill; + break; + case SIGQUIT: + case SIGILL: + case SIGABRT: + case SIGFPE: + ret = User_Signal_Core; + break; case SIGKILL: + ret = User_Signal_Kill; + break; case SIGSEGV: - case SIGHUP: + ret = User_Signal_Core; + break; + case SIGPIPE: + case SIGALRM: + case SIGTERM: ret = User_Signal_Kill; break; default: