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);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to