svn commit: r218719 - head/sys/compat/linux
Dmitry Chagin
dchagin at FreeBSD.org
Tue Feb 15 21:42:48 UTC 2011
Author: dchagin
Date: Tue Feb 15 21:42:48 2011
New Revision: 218719
URL: http://svn.freebsd.org/changeset/base/218719
Log:
Make a linux_rt_sigtimedwait() system call is actually working.
1) Translate the native signal number in the appropriate Linux signal.
2) Remove bogus code, which can lead to a panic as it calls
kern_sigtimedwait with same ksiginfo.
3) Return the corresponding signal number.
Modified:
head/sys/compat/linux/linux_signal.c
Modified: head/sys/compat/linux/linux_signal.c
==============================================================================
--- head/sys/compat/linux/linux_signal.c Tue Feb 15 21:24:50 2011 (r218718)
+++ head/sys/compat/linux/linux_signal.c Tue Feb 15 21:42:48 2011 (r218719)
@@ -431,7 +431,7 @@ int
linux_rt_sigtimedwait(struct thread *td,
struct linux_rt_sigtimedwait_args *args)
{
- int error;
+ int error, sig;
l_timeval ltv;
struct timeval tv;
struct timespec ts, *tsa;
@@ -495,19 +495,15 @@ linux_rt_sigtimedwait(struct thread *td,
if (error)
return (error);
+ sig = BSD_TO_LINUX_SIGNAL(info.ksi_signo);
+
if (args->ptr) {
memset(&linfo, 0, sizeof(linfo));
- linfo.lsi_signo = info.ksi_signo;
+ ksiginfo_to_lsiginfo(&info, &linfo, sig);
error = copyout(&linfo, args->ptr, sizeof(linfo));
}
-
- /* Repost if we got an error. */
- if (error && info.ksi_signo) {
- PROC_LOCK(td->td_proc);
- tdksignal(td, info.ksi_signo, &info);
- PROC_UNLOCK(td->td_proc);
- } else
- td->td_retval[0] = info.ksi_signo;
+ if (error == 0)
+ td->td_retval[0] = sig;
return (error);
}
More information about the svn-src-all
mailing list