<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for rtems (2010-07-27)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>joel</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-07-27 Vinu Rajashekhar <vinutheraj@gmail.com>

        PR 1630/cpukit
        * posix/src/psignalchecksignal.c, posix/src/sigtimedwait.c:
        sigtimedwait() was not completely following the POSIX specification.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/ChangeLog.diff?r1=text&tr1=1.2527&r2=text&tr2=1.2528&diff_format=h">M</a></td><td width='1%'>1.2528</td><td width='100%'>cpukit/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/posix/src/psignalchecksignal.c.diff?r1=text&tr1=1.9&r2=text&tr2=1.10&diff_format=h">M</a></td><td width='1%'>1.10</td><td width='100%'>cpukit/posix/src/psignalchecksignal.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/posix/src/sigtimedwait.c.diff?r1=text&tr1=1.17&r2=text&tr2=1.18&diff_format=h">M</a></td><td width='1%'>1.18</td><td width='100%'>cpukit/posix/src/sigtimedwait.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.2527 rtems/cpukit/ChangeLog:1.2528
--- rtems/cpukit/ChangeLog:1.2527       Mon Jul 26 21:17:31 2010
+++ rtems/cpukit/ChangeLog      Tue Jul 27 11:34:26 2010
</font><font color='#997700'>@@ -1,3 +1,9 @@
</font><font color='#000088'>+2010-07-27    Vinu Rajashekhar <vinutheraj@gmail.com>
+
+       PR 1630/cpukit
+       * posix/src/psignalchecksignal.c, posix/src/sigtimedwait.c:
+       sigtimedwait() was not completely following the POSIX specification.
+
</font> 2010-07-26        Joel Sherrill <joel.sherrilL@OARcorp.com>
 
        * score/src/threadget.c: Conditionalize a check that can only occur

<font color='#006600'>diff -u rtems/cpukit/posix/src/psignalchecksignal.c:1.9 rtems/cpukit/posix/src/psignalchecksignal.c:1.10
--- rtems/cpukit/posix/src/psignalchecksignal.c:1.9     Mon Jun 29 18:19:28 2009
+++ rtems/cpukit/posix/src/psignalchecksignal.c Tue Jul 27 11:34:26 2010
</font><font color='#997700'>@@ -19,6 +19,7 @@
</font> #include <errno.h>
 #include <pthread.h>
 #include <signal.h>
<font color='#000088'>+#include <string.h>
</font> 
 #include <rtems/system.h>
 #include <rtems/score/isr.h>
<font color='#997700'>@@ -46,6 +47,7 @@
</font> {
   siginfo_t                   siginfo_struct;
   sigset_t                    saved_signals_blocked;
<font color='#000088'>+  Thread_Wait_information     stored_thread_wait_information;
</font> 
   if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
                                        is_global, true ) )
<font color='#997700'>@@ -73,6 +75,14 @@
</font>   api->signals_blocked |= _POSIX_signals_Vectors[ signo ].sa_mask;
 
   /*
<font color='#000088'>+   *  We have to save the blocking information of the current wait queue
+   *  because the signal handler may subsequently go on and put the thread
+   *  on a wait queue, for its own purposes.
+   */
+  memcpy( &stored_thread_wait_information, &_Thread_Executing->Wait,
+          sizeof( Thread_Wait_information ));
+
+  /*
</font>    *  Here, the signal handler function executes
    */
   switch ( _POSIX_signals_Vectors[ signo ].sa_flags ) {
<font color='#997700'>@@ -89,6 +99,12 @@
</font>   }
 
   /*
<font color='#000088'>+   *  Restore the blocking information
+   */
+  memcpy( &_Thread_Executing->Wait, &stored_thread_wait_information,
+          sizeof( Thread_Wait_information ));
+
+  /*
</font>    *  Restore the previous set of blocked signals
    */
   api->signals_blocked = saved_signals_blocked;

<font color='#006600'>diff -u rtems/cpukit/posix/src/sigtimedwait.c:1.17 rtems/cpukit/posix/src/sigtimedwait.c:1.18
--- rtems/cpukit/posix/src/sigtimedwait.c:1.17  Mon Nov 30 09:44:21 2009
+++ rtems/cpukit/posix/src/sigtimedwait.c       Tue Jul 27 11:34:26 2010
</font><font color='#997700'>@@ -26,7 +26,7 @@
</font> #include <rtems/posix/time.h>
 #include <rtems/score/isr.h>
 
<font color='#880000'>-int _POSIX_signals_Get_highest(
</font><font color='#000088'>+int _POSIX_signals_Get_lowest(
</font>   sigset_t   set
 )
 {
<font color='#997700'>@@ -115,7 +115,7 @@
</font>   _ISR_Disable( level );
   if ( *set & api->signals_pending ) {
     /* XXX real info later */
<font color='#880000'>-    the_info->si_signo = _POSIX_signals_Get_highest( api->signals_pending );
</font><font color='#000088'>+    the_info->si_signo = _POSIX_signals_Get_lowest( api->signals_pending );
</font>     _POSIX_signals_Clear_signals(
       api,
       the_info->si_signo,
<font color='#997700'>@@ -133,7 +133,7 @@
</font>   /* Process pending signals? */
 
   if ( *set & _POSIX_signals_Pending ) {
<font color='#880000'>-    signo = _POSIX_signals_Get_highest( _POSIX_signals_Pending );
</font><font color='#000088'>+    signo = _POSIX_signals_Get_lowest( _POSIX_signals_Pending );
</font>     _POSIX_signals_Clear_signals( api, signo, the_info, true, false );
     _ISR_Enable( level );
 
<font color='#997700'>@@ -161,6 +161,17 @@
</font>    */
 
   _POSIX_signals_Clear_signals( api, the_info->si_signo, the_info, false, false );
<font color='#880000'>-  errno = _Thread_Executing->Wait.return_code;
</font><font color='#000088'>+
+  /* Set errno only if return code is not EINTR or
+   * if EINTR was caused by a signal being caught, which
+   * was not in our set.
+   */
+
+  if ( (_Thread_Executing->Wait.return_code != EINTR)
+       || !(*set & signo_to_mask( the_info->si_signo )) ) {
+    errno = _Thread_Executing->Wait.return_code;
+    return -1;
+  }
+
</font>   return the_info->si_signo;
 }
</pre>
<p> </p>
<a name='cs2'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>joel</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-07-27 Vinu Rajashekhar <vinutheraj@gmail.com>

        PR 1629/cpukit
        * psx04/init.c: sigsuspend() was not completely following the POSIX
        specification.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/psxtests/ChangeLog.diff?r1=text&tr1=1.297&r2=text&tr2=1.298&diff_format=h">M</a></td><td width='1%'>1.298</td><td width='100%'>testsuites/psxtests/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/psxtests/psx04/init.c.diff?r1=text&tr1=1.22&r2=text&tr2=1.23&diff_format=h">M</a></td><td width='1%'>1.23</td><td width='100%'>testsuites/psxtests/psx04/init.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/testsuites/psxtests/ChangeLog:1.297 rtems/testsuites/psxtests/ChangeLog:1.298
--- rtems/testsuites/psxtests/ChangeLog:1.297   Mon Jul 19 08:13:20 2010
+++ rtems/testsuites/psxtests/ChangeLog Tue Jul 27 11:38:07 2010
</font><font color='#997700'>@@ -1,3 +1,9 @@
</font><font color='#000088'>+2010-07-27    Vinu Rajashekhar <vinutheraj@gmail.com>
+
+       PR 1629/cpukit
+       * psx04/init.c: sigsuspend() was not completely following the POSIX
+       specification.
+
</font> 2010-07-19        Bharath Suri <bharath.s.jois@gmail.com>
 
        PR 1623/testing

<font color='#006600'>diff -u rtems/testsuites/psxtests/psx04/init.c:1.22 rtems/testsuites/psxtests/psx04/init.c:1.23
--- rtems/testsuites/psxtests/psx04/init.c:1.22 Tue Dec  8 11:52:52 2009
+++ rtems/testsuites/psxtests/psx04/init.c      Tue Jul 27 11:38:08 2010
</font><font color='#997700'>@@ -414,6 +414,9 @@
</font> 
   /* Suspend for signal that has already be sent */
 
<font color='#000088'>+  status = sigemptyset( &mask );
+  rtems_test_assert(  !status );
+
</font>   puts( "Init: sigsuspend for any signal" );
   status = sigsuspend( &mask );
   rtems_test_assert(  status );
</pre>
<p> </p>
<a name='cs3'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>joel</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-07-27 Vinu Rajashekhar <vinutheraj@gmail.com>

        PR 1629/cpukit
        * posix/src/sigsuspend.c: sigsuspend() was not completely following the
        POSIX specification.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/ChangeLog.diff?r1=text&tr1=1.2528&r2=text&tr2=1.2529&diff_format=h">M</a></td><td width='1%'>1.2529</td><td width='100%'>cpukit/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/posix/src/sigsuspend.c.diff?r1=text&tr1=1.5&r2=text&tr2=1.6&diff_format=h">M</a></td><td width='1%'>1.6</td><td width='100%'>cpukit/posix/src/sigsuspend.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.2528 rtems/cpukit/ChangeLog:1.2529
--- rtems/cpukit/ChangeLog:1.2528       Tue Jul 27 11:34:26 2010
+++ rtems/cpukit/ChangeLog      Tue Jul 27 11:38:15 2010
</font><font color='#997700'>@@ -1,5 +1,11 @@
</font> 2010-07-27        Vinu Rajashekhar <vinutheraj@gmail.com>
 
<font color='#000088'>+   PR 1629/cpukit
+       * posix/src/sigsuspend.c: sigsuspend() was not completely following the
+       POSIX specification.
+
+2010-07-27     Vinu Rajashekhar <vinutheraj@gmail.com>
+
</font>   PR 1630/cpukit
        * posix/src/psignalchecksignal.c, posix/src/sigtimedwait.c:
        sigtimedwait() was not completely following the POSIX specification.

<font color='#006600'>diff -u rtems/cpukit/posix/src/sigsuspend.c:1.5 rtems/cpukit/posix/src/sigsuspend.c:1.6
--- rtems/cpukit/posix/src/sigsuspend.c:1.5     Fri May 21 15:19:33 2004
+++ rtems/cpukit/posix/src/sigsuspend.c Tue Jul 27 11:38:15 2010
</font><font color='#997700'>@@ -15,6 +15,7 @@
</font> #include "config.h"
 #endif
 
<font color='#000088'>+#include <assert.h>
</font> #include <signal.h>
 #include <errno.h>
 
<font color='#997700'>@@ -28,17 +29,21 @@
</font> )
 {
   sigset_t            saved_signals_blocked;
<font color='#880000'>-  sigset_t            all_signals;
</font><font color='#000088'>+  sigset_t            current_unblocked_signals;
</font>   int                 status;
   POSIX_API_Control  *api;
 
   api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
 
<font color='#000088'>+  /*
+   *  We use SIG_BLOCK and not SIG_SETMASK because there may be
+   *  signals which might be pending, which might get caught here.
+   *  We want the signals to be caught inside sigtimedwait.
+   */
</font>   status = sigprocmask( SIG_BLOCK, sigmask, &saved_signals_blocked );
 
<font color='#880000'>-  (void) sigfillset( &all_signals );
-
-  status = sigtimedwait( &all_signals, NULL, NULL );
</font><font color='#000088'>+  current_unblocked_signals = ~(*sigmask);
+  status = sigtimedwait( &current_unblocked_signals, NULL, NULL );
</font> 
   (void) sigprocmask( SIG_SETMASK, &saved_signals_blocked, NULL );
 
<font color='#997700'>@@ -46,8 +51,7 @@
</font>    * sigtimedwait() returns the signal number while sigsuspend()
    * is supposed to return -1 and EINTR when a signal is caught.
    */
<font color='#880000'>-  if ( status != -1 )
-    rtems_set_errno_and_return_minus_one( EINTR );
</font><font color='#000088'>+  assert ( status != -1 );
</font> 
<font color='#880000'>-  return status;
</font><font color='#000088'>+  rtems_set_errno_and_return_minus_one( EINTR );
</font> }
</pre>
<p> </p>

<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>