diff options
-rw-r--r-- | lib/libc_r/uthread/uthread_kern.c | 9 | ||||
-rw-r--r-- | lib/libc_r/uthread/uthread_sig.c | 18 | ||||
-rw-r--r-- | lib/libpthread/uthread/uthread_kern.c | 9 | ||||
-rw-r--r-- | lib/libpthread/uthread/uthread_sig.c | 18 |
4 files changed, 38 insertions, 16 deletions
diff --git a/lib/libc_r/uthread/uthread_kern.c b/lib/libc_r/uthread/uthread_kern.c index d9a6108397b..c055b61cb39 100644 --- a/lib/libc_r/uthread/uthread_kern.c +++ b/lib/libc_r/uthread/uthread_kern.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uthread_kern.c,v 1.17 2001/12/08 14:51:36 fgsch Exp $ */ +/* $OpenBSD: uthread_kern.c,v 1.18 2001/12/18 03:47:52 marc Exp $ */ /* * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> * All rights reserved. @@ -546,7 +546,12 @@ _thread_kern_sched(struct sigcontext * scp) PTHREAD_CANCEL_ASYNCHRONOUS) != 0)) pthread_testcancel(); - _thread_sys_sigreturn(&_thread_run->saved_sigcontext); + /* return to signal handler. This code + should be: + _thread_sys_sigreturn(&_thread_run->saved_sigcontext); + but that doesn't currently work on the + sparc */ + return; } else { /* * This is the normal way out of the scheduler. diff --git a/lib/libc_r/uthread/uthread_sig.c b/lib/libc_r/uthread/uthread_sig.c index c13d2050441..2755ba4747a 100644 --- a/lib/libc_r/uthread/uthread_sig.c +++ b/lib/libc_r/uthread/uthread_sig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uthread_sig.c,v 1.10 2001/11/05 22:53:28 marc Exp $ */ +/* $OpenBSD: uthread_sig.c,v 1.11 2001/12/18 03:47:52 marc Exp $ */ /* * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> * All rights reserved. @@ -93,11 +93,17 @@ _thread_sig_handler(int sig, int code, struct sigcontext * scp) */ _thread_kern_sched(scp); - /* - * This point should not be reached, so abort the - * process: - */ - PANIC("Returned to signal function from scheduler"); + /* The scheduler currently returns here instead + of calling sigreturn due to a sparc sigreturn + bug. We should also return. That brings + us back to the sigtramp code which will + sigreturn to the context stored on the current + stack (which is the same as scp, above). + The code originally did this: + + PANIC("Returned to signal function from scheduler"); + */ + return; } } /* diff --git a/lib/libpthread/uthread/uthread_kern.c b/lib/libpthread/uthread/uthread_kern.c index d9a6108397b..c055b61cb39 100644 --- a/lib/libpthread/uthread/uthread_kern.c +++ b/lib/libpthread/uthread/uthread_kern.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uthread_kern.c,v 1.17 2001/12/08 14:51:36 fgsch Exp $ */ +/* $OpenBSD: uthread_kern.c,v 1.18 2001/12/18 03:47:52 marc Exp $ */ /* * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> * All rights reserved. @@ -546,7 +546,12 @@ _thread_kern_sched(struct sigcontext * scp) PTHREAD_CANCEL_ASYNCHRONOUS) != 0)) pthread_testcancel(); - _thread_sys_sigreturn(&_thread_run->saved_sigcontext); + /* return to signal handler. This code + should be: + _thread_sys_sigreturn(&_thread_run->saved_sigcontext); + but that doesn't currently work on the + sparc */ + return; } else { /* * This is the normal way out of the scheduler. diff --git a/lib/libpthread/uthread/uthread_sig.c b/lib/libpthread/uthread/uthread_sig.c index c13d2050441..2755ba4747a 100644 --- a/lib/libpthread/uthread/uthread_sig.c +++ b/lib/libpthread/uthread/uthread_sig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uthread_sig.c,v 1.10 2001/11/05 22:53:28 marc Exp $ */ +/* $OpenBSD: uthread_sig.c,v 1.11 2001/12/18 03:47:52 marc Exp $ */ /* * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> * All rights reserved. @@ -93,11 +93,17 @@ _thread_sig_handler(int sig, int code, struct sigcontext * scp) */ _thread_kern_sched(scp); - /* - * This point should not be reached, so abort the - * process: - */ - PANIC("Returned to signal function from scheduler"); + /* The scheduler currently returns here instead + of calling sigreturn due to a sparc sigreturn + bug. We should also return. That brings + us back to the sigtramp code which will + sigreturn to the context stored on the current + stack (which is the same as scp, above). + The code originally did this: + + PANIC("Returned to signal function from scheduler"); + */ + return; } } /* |