<!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 (2011-08-21)</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>2011-08-21 Joel Sherrill <joel.sherrilL@OARcorp.com>

        PR 1873/cpukit
        * score/include/rtems/score/heap.h: When using heap protection, we
        should account for adding an aligned protection footer.
</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.2904&r2=text&tr2=1.2905&diff_format=h">M</a></td><td width='1%'>1.2905</td><td width='100%'>cpukit/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/include/rtems/score/heap.h.diff?r1=text&tr1=1.45&r2=text&tr2=1.46&diff_format=h">M</a></td><td width='1%'>1.46</td><td width='100%'>cpukit/score/include/rtems/score/heap.h</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.2904 rtems/cpukit/ChangeLog:1.2905
--- rtems/cpukit/ChangeLog:1.2904       Wed Aug 17 04:14:08 2011
+++ rtems/cpukit/ChangeLog      Sun Aug 21 14:51:40 2011
</font><font color='#997700'>@@ -1,3 +1,9 @@
</font><font color='#000088'>+2011-08-21    Joel Sherrill <joel.sherrilL@OARcorp.com>
+
+       PR 1873/cpukit
+       * score/include/rtems/score/heap.h: When using heap protection, we
+       should account for adding an aligned protection footer.
+
</font> 2011-08-17        Sebastian Huber <sebastian.huber@embedded-brains.de>
 
        * sapi/include/confdefs.h: Revert previous commit due to multi-lib

<font color='#006600'>diff -u rtems/cpukit/score/include/rtems/score/heap.h:1.45 rtems/cpukit/score/include/rtems/score/heap.h:1.46
--- rtems/cpukit/score/include/rtems/score/heap.h:1.45  Thu Feb 17 08:17:09 2011
+++ rtems/cpukit/score/include/rtems/score/heap.h       Sun Aug 21 14:51:41 2011
</font><font color='#997700'>@@ -177,7 +177,9 @@
</font>   } Heap_Protection_block_end;
 
   #define HEAP_PROTECTION_HEADER_SIZE \
<font color='#880000'>-    (sizeof(Heap_Protection_block_begin) + sizeof(Heap_Protection_block_end))
</font><font color='#000088'>+    (sizeof(Heap_Protection_block_begin) + \
+     CPU_ALIGNMENT + \
+     sizeof(Heap_Protection_block_end))
</font> #endif
 
 /**
</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>
 <font color='#225522'><em>(on branch rtems-4-9-branch)</em></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-08-21 Joel Sherrill <joel.sherrilL@OARcorp.com>

        PR 1890/cpukit
        * posix/src/mqueuerecvsupp.c: POSIX says msg_prio is allowed to be
        NULL.
</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.2905&r2=text&tr2=1.2906&diff_format=h">M</a></td><td width='1%'>1.2906</td><td width='100%'>cpukit/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/ChangeLog.diff?r1=text&tr1=1.1539.2.80&r2=text&tr2=1.1539.2.81&diff_format=h">M</a></td><td width='1%'>1.1539.2.81</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/mqueuerecvsupp.c.diff?r1=text&tr1=1.18&r2=text&tr2=1.19&diff_format=h">M</a></td><td width='1%'>1.19</td><td width='100%'>cpukit/posix/src/mqueuerecvsupp.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/posix/src/mqueuerecvsupp.c.diff?r1=text&tr1=1.17&r2=text&tr2=1.17.2.1&diff_format=h">M</a></td><td width='1%'>1.17.2.1</td><td width='100%'>cpukit/posix/src/mqueuerecvsupp.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.2905 rtems/cpukit/ChangeLog:1.2906
--- rtems/cpukit/ChangeLog:1.2905       Sun Aug 21 14:51:40 2011
+++ rtems/cpukit/ChangeLog      Sun Aug 21 14:59:03 2011
</font><font color='#997700'>@@ -1,5 +1,11 @@
</font> 2011-08-21        Joel Sherrill <joel.sherrilL@OARcorp.com>
 
<font color='#000088'>+   PR 1890/cpukit
+       * posix/src/mqueuerecvsupp.c: POSIX says msg_prio is allowed to be
+       NULL.
+
+2011-08-21     Joel Sherrill <joel.sherrilL@OARcorp.com>
+
</font>   PR 1873/cpukit
        * score/include/rtems/score/heap.h: When using heap protection, we
        should account for adding an aligned protection footer.

<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.1539.2.80 rtems/cpukit/ChangeLog:1.1539.2.81
--- rtems/cpukit/ChangeLog:1.1539.2.80  Sun Jul 31 17:41:04 2011
+++ rtems/cpukit/ChangeLog      Sun Aug 21 14:59:10 2011
</font><font color='#997700'>@@ -1,3 +1,9 @@
</font><font color='#000088'>+2011-08-21    Joel Sherrill <joel.sherrilL@OARcorp.com>
+
+       PR 1890/cpukit
+       * posix/src/mqueuerecvsupp.c: POSIX says msg_prio is allowed to be
+       NULL.
+
</font> 2011-07-31        Joel Sherrill <joel.sherrilL@OARcorp.com>
 
        PR 1855/cpukit

<font color='#006600'>diff -u rtems/cpukit/posix/src/mqueuerecvsupp.c:1.18 rtems/cpukit/posix/src/mqueuerecvsupp.c:1.19
--- rtems/cpukit/posix/src/mqueuerecvsupp.c:1.18        Tue Feb  3 04:10:48 2009
+++ rtems/cpukit/posix/src/mqueuerecvsupp.c     Sun Aug 21 14:59:03 2011
</font><font color='#997700'>@@ -11,7 +11,7 @@
</font>  *         This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open
  *         time.
  *
<font color='#880000'>- *  COPYRIGHT (c) 1989-2008.
</font><font color='#000088'>+ *  COPYRIGHT (c) 1989-2011.
</font>  *  On-Line Applications Research Corporation (OAR).
  *
  *  The license and distribution terms for this file may be
<font color='#997700'>@@ -105,8 +105,11 @@
</font>       );
 
       _Thread_Enable_dispatch();
<font color='#880000'>-      *msg_prio =
-        _POSIX_Message_queue_Priority_from_core(_Thread_Executing->Wait.count);
</font><font color='#000088'>+      if (msg_prio) {
+        *msg_prio = _POSIX_Message_queue_Priority_from_core(
+             _Thread_Executing->Wait.count
+          );
+      }
</font> 
       if ( !_Thread_Executing->Wait.return_code )
         return length_out;

<font color='#006600'>diff -u rtems/cpukit/posix/src/mqueuerecvsupp.c:1.17 rtems/cpukit/posix/src/mqueuerecvsupp.c:1.17.2.1
--- rtems/cpukit/posix/src/mqueuerecvsupp.c:1.17        Thu Sep  4 10:23:11 2008
+++ rtems/cpukit/posix/src/mqueuerecvsupp.c     Sun Aug 21 14:59:13 2011
</font><font color='#997700'>@@ -11,7 +11,7 @@
</font>  *         This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open
  *         time.
  *
<font color='#880000'>- *  COPYRIGHT (c) 1989-2008.
</font><font color='#000088'>+ *  COPYRIGHT (c) 1989-2011.
</font>  *  On-Line Applications Research Corporation (OAR).
  *
  *  The license and distribution terms for this file may be
<font color='#997700'>@@ -105,8 +105,11 @@
</font>       );
 
       _Thread_Enable_dispatch();
<font color='#880000'>-      *msg_prio =
-        _POSIX_Message_queue_Priority_from_core(_Thread_Executing->Wait.count);
</font><font color='#000088'>+      if (msg_prio) {
+        *msg_prio = _POSIX_Message_queue_Priority_from_core(
+             _Thread_Executing->Wait.count
+          );
+      }
</font> 
       if ( !_Thread_Executing->Wait.return_code )
         return length_out;
</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>
 <font color='#225522'><em>(on branch rtems-4-10-branch)</em></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-08-21 Joel Sherrill <joel.sherrilL@OARcorp.com>

        PR 1890/cpukit
        * psxmsgq01/init.c: POSIX says msg_prio is allowed to be NULL.
</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.352&r2=text&tr2=1.353&diff_format=h">M</a></td><td width='1%'>1.353</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/ChangeLog.diff?r1=text&tr1=1.125.2.2&r2=text&tr2=1.125.2.3&diff_format=h">M</a></td><td width='1%'>1.125.2.3</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/ChangeLog.diff?r1=text&tr1=1.264.2.5&r2=text&tr2=1.264.2.6&diff_format=h">M</a></td><td width='1%'>1.264.2.6</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/psxmsgq01/init.c.diff?r1=text&tr1=1.27&r2=text&tr2=1.28&diff_format=h">M</a></td><td width='1%'>1.28</td><td width='100%'>testsuites/psxtests/psxmsgq01/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/psxtests/psxmsgq01/init.c.diff?r1=text&tr1=1.18&r2=text&tr2=1.18.2.1&diff_format=h">M</a></td><td width='1%'>1.18.2.1</td><td width='100%'>testsuites/psxtests/psxmsgq01/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/psxtests/psxmsgq01/init.c.diff?r1=text&tr1=1.23&r2=text&tr2=1.23.2.1&diff_format=h">M</a></td><td width='1%'>1.23.2.1</td><td width='100%'>testsuites/psxtests/psxmsgq01/init.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/testsuites/psxtests/ChangeLog:1.352 rtems/testsuites/psxtests/ChangeLog:1.353
--- rtems/testsuites/psxtests/ChangeLog:1.352   Thu Aug 18 02:47:37 2011
+++ rtems/testsuites/psxtests/ChangeLog Sun Aug 21 14:59:51 2011
</font><font color='#997700'>@@ -1,3 +1,8 @@
</font><font color='#000088'>+2011-08-21    Joel Sherrill <joel.sherrilL@OARcorp.com>
+
+       PR 1890/cpukit
+       * psxmsgq01/init.c: POSIX says msg_prio is allowed to be NULL.
+
</font> 2011-08-18        Sebastian Huber <sebastian.huber@embedded-brains.de>
 
        * psxfatal_support/init.c: Ensure that _Thread_BSP_context is

<font color='#006600'>diff -u rtems/testsuites/psxtests/ChangeLog:1.125.2.2 rtems/testsuites/psxtests/ChangeLog:1.125.2.3
--- rtems/testsuites/psxtests/ChangeLog:1.125.2.2       Sun Jul 31 17:41:16 2011
+++ rtems/testsuites/psxtests/ChangeLog Sun Aug 21 15:00:01 2011
</font><font color='#997700'>@@ -1,3 +1,8 @@
</font><font color='#000088'>+2011-08-21    Joel Sherrill <joel.sherrilL@OARcorp.com>
+
+       PR 1890/cpukit
+       * psxmsgq01/init.c: POSIX says msg_prio is allowed to be NULL.
+
</font> 2011-07-31        Joel Sherrill <joel.sherrilL@OARcorp.com>
 
        PR 1855/cpukit

<font color='#006600'>diff -u rtems/testsuites/psxtests/ChangeLog:1.264.2.5 rtems/testsuites/psxtests/ChangeLog:1.264.2.6
--- rtems/testsuites/psxtests/ChangeLog:1.264.2.5       Sun Jul 31 17:40:53 2011
+++ rtems/testsuites/psxtests/ChangeLog Sun Aug 21 14:59:56 2011
</font><font color='#997700'>@@ -1,3 +1,8 @@
</font><font color='#000088'>+2011-08-21    Joel Sherrill <joel.sherrilL@OARcorp.com>
+
+       PR 1890/cpukit
+       * psxmsgq01/init.c: POSIX says msg_prio is allowed to be NULL.
+
</font> 2011-07-31        Joel Sherrill <joel.sherrilL@OARcorp.com>
 
        PR 1855/cpukit

<font color='#006600'>diff -u rtems/testsuites/psxtests/psxmsgq01/init.c:1.27 rtems/testsuites/psxtests/psxmsgq01/init.c:1.28
--- rtems/testsuites/psxtests/psxmsgq01/init.c:1.27     Fri May  6 12:29:29 2011
+++ rtems/testsuites/psxtests/psxmsgq01/init.c  Sun Aug 21 14:59:51 2011
</font><font color='#997700'>@@ -1141,11 +1141,10 @@
</font>   int   is_blocking
 )
 {
<font color='#880000'>-  char message[ 100 ];
-  unsigned int priority;
-  struct timespec tm;
-  struct timeval  tv1, tv2, tv3;
-  struct timezone tz1, tz2;
</font><font color='#000088'>+  char             message[ 100 ];
+  struct timespec  tm;
+  struct timeval   tv1, tv2, tv3;
+  struct timezone  tz1, tz2;
</font>   int              status;
 
   printf(
<font color='#997700'>@@ -1158,7 +1157,7 @@
</font>   tm.tv_sec  = tv1.tv_sec - 1;
   tm.tv_nsec = tv1.tv_usec * 1000;
 
<font color='#880000'>-  status = mq_timedreceive( Test_q[ que ].mq, message, 100, &priority, &tm );
</font><font color='#000088'>+  status = mq_timedreceive( Test_q[ que ].mq, message, 100, NULL, &tm );
</font> 
   gettimeofday( &tv2, &tz2 );
   tv3.tv_sec  = tv2.tv_sec - tv1.tv_sec;

<font color='#006600'>diff -u rtems/testsuites/psxtests/psxmsgq01/init.c:1.18 rtems/testsuites/psxtests/psxmsgq01/init.c:1.18.2.1
--- rtems/testsuites/psxtests/psxmsgq01/init.c:1.18     Fri Jul 18 13:47:30 2008
+++ rtems/testsuites/psxtests/psxmsgq01/init.c  Sun Aug 21 15:00:01 2011
</font><font color='#997700'>@@ -789,11 +789,10 @@
</font>   int   is_blocking
 )
 {
<font color='#880000'>-  char message[ 100 ];
-  unsigned int priority;
-  struct timespec tm;
-  struct timeval  tv1, tv2, tv3;
-  struct timezone tz1, tz2;
</font><font color='#000088'>+  char             message[ 100 ];
+  struct timespec  tm;
+  struct timeval   tv1, tv2, tv3;
+  struct timezone  tz1, tz2;
</font>   int              status;
 
   printf(
<font color='#997700'>@@ -806,7 +805,7 @@
</font>   tm.tv_sec  = tv1.tv_sec + 1;
   tm.tv_nsec = tv1.tv_usec * 1000;
 
<font color='#880000'>-  status = mq_timedreceive( Test_q[ que ].mq, message, 100, &priority, &tm );
</font><font color='#000088'>+  status = mq_timedreceive( Test_q[ que ].mq, message, 100, NULL, &tm );
</font> 
   gettimeofday( &tv2, &tz2 );
   tv3.tv_sec  = tv2.tv_sec - tv1.tv_sec;

<font color='#006600'>diff -u rtems/testsuites/psxtests/psxmsgq01/init.c:1.23 rtems/testsuites/psxtests/psxmsgq01/init.c:1.23.2.1
--- rtems/testsuites/psxtests/psxmsgq01/init.c:1.23     Tue Dec  8 11:52:53 2009
+++ rtems/testsuites/psxtests/psxmsgq01/init.c  Sun Aug 21 14:59:56 2011
</font><font color='#997700'>@@ -1137,11 +1137,10 @@
</font>   int   is_blocking
 )
 {
<font color='#880000'>-  char message[ 100 ];
-  unsigned int priority;
-  struct timespec tm;
-  struct timeval  tv1, tv2, tv3;
-  struct timezone tz1, tz2;
</font><font color='#000088'>+  char             message[ 100 ];
+  struct timespec  tm;
+  struct timeval   tv1, tv2, tv3;
+  struct timezone  tz1, tz2;
</font>   int              status;
 
   printf(
<font color='#997700'>@@ -1154,7 +1153,7 @@
</font>   tm.tv_sec  = tv1.tv_sec - 1;
   tm.tv_nsec = tv1.tv_usec * 1000;
 
<font color='#880000'>-  status = mq_timedreceive( Test_q[ que ].mq, message, 100, &priority, &tm );
</font><font color='#000088'>+  status = mq_timedreceive( Test_q[ que ].mq, message, 100, NULL, &tm );
</font> 
   gettimeofday( &tv2, &tz2 );
   tv3.tv_sec  = tv2.tv_sec - tv1.tv_sec;
</pre>
<p> </p>
<a name='cs4'></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>2011-08-21 Petr Benes <benesp16@fel.cvut.cz>

        PR 1886/cpukit
        * sapi/include/rtems/rbtree.h, sapi/inline/rtems/rbtree.inl,
        score/include/rtems/score/rbtree.h,
        score/inline/rtems/score/rbtree.inl, score/src/rbtree.c,
        score/src/rbtreeinsert.c: This patch enables inserting duplicate keys
        into rbtree. It is possible to turn on this feature when initializing
        the tree.
</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.2906&r2=text&tr2=1.2907&diff_format=h">M</a></td><td width='1%'>1.2907</td><td width='100%'>cpukit/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/sapi/include/rtems/rbtree.h.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>cpukit/sapi/include/rtems/rbtree.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/sapi/inline/rtems/rbtree.inl.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>cpukit/sapi/inline/rtems/rbtree.inl</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/include/rtems/score/rbtree.h.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/score/include/rtems/score/rbtree.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/inline/rtems/score/rbtree.inl.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>cpukit/score/inline/rtems/score/rbtree.inl</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/src/rbtree.c.diff?r1=text&tr1=1.4&r2=text&tr2=1.5&diff_format=h">M</a></td><td width='1%'>1.5</td><td width='100%'>cpukit/score/src/rbtree.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/src/rbtreeinsert.c.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>cpukit/score/src/rbtreeinsert.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.2906 rtems/cpukit/ChangeLog:1.2907
--- rtems/cpukit/ChangeLog:1.2906       Sun Aug 21 14:59:03 2011
+++ rtems/cpukit/ChangeLog      Sun Aug 21 15:07:10 2011
</font><font color='#997700'>@@ -1,3 +1,13 @@
</font><font color='#000088'>+2011-08-21    Petr Benes <benesp16@fel.cvut.cz>
+
+       PR 1886/cpukit
+       * sapi/include/rtems/rbtree.h, sapi/inline/rtems/rbtree.inl,
+       score/include/rtems/score/rbtree.h,
+       score/inline/rtems/score/rbtree.inl, score/src/rbtree.c,
+       score/src/rbtreeinsert.c: This patch enables inserting duplicate keys
+       into rbtree. It is possible to turn on this feature when initializing
+       the tree.
+
</font> 2011-08-21        Joel Sherrill <joel.sherrilL@OARcorp.com>
 
        PR 1890/cpukit

<font color='#006600'>diff -u rtems/cpukit/sapi/include/rtems/rbtree.h:1.1 rtems/cpukit/sapi/include/rtems/rbtree.h:1.2
--- rtems/cpukit/sapi/include/rtems/rbtree.h:1.1        Mon Apr  4 13:44:16 2011
+++ rtems/cpukit/sapi/include/rtems/rbtree.h    Sun Aug 21 15:07:11 2011
</font><font color='#997700'>@@ -43,6 +43,29 @@
</font> typedef RBTree_Control rtems_rbtree_control;
 
 /**
<font color='#000088'>+ * @typedef rtems_rbtree_compare_function
+ *
+ * This type defines function pointers for user-provided comparison
+ * function. The function compares two nodes in order to determine
+ * the order in a red-black tree.
+ */
+typedef RBTree_Compare_function rtems_rbtree_compare_function;
+
+/**
+ * @typedef rtems_rbtree_unique
+ *
+ * This enum type defines whether the tree can contain nodes with
+ * duplicate keys.
+ */
+typedef enum {
+  /** The tree is not unique, insertion of duplicate keys is performed
+   *  in a FIFO manner. */
+  RTEMS_RBTREE_DUPLICATE = false,
+  /** The tree is unique, insertion of duplicate key is refused. */
+  RTEMS_RBTREE_UNIQUE    = true
+} rtems_rbtree_unique;
+
+/**
</font>  *  @brief RBTree initializer for an empty rbtree with designator @a name.
  */
 #define RTEMS_RBTREE_INITIALIZER_EMPTY(name) \

<font color='#006600'>diff -u rtems/cpukit/sapi/inline/rtems/rbtree.inl:1.2 rtems/cpukit/sapi/inline/rtems/rbtree.inl:1.3
--- rtems/cpukit/sapi/inline/rtems/rbtree.inl:1.2       Tue Aug  2 14:25:59 2011
+++ rtems/cpukit/sapi/inline/rtems/rbtree.inl   Sun Aug 21 15:07:11 2011
</font><font color='#997700'>@@ -35,15 +35,16 @@
</font>  *  @a starting_address.  Each node is of @a node_size bytes.
  */
 RTEMS_INLINE_ROUTINE void rtems_rbtree_initialize(
<font color='#880000'>-  rtems_rbtree_control *the_rbtree,
-  void                 *compare_function,
-  void                 *starting_address,
-  size_t                number_nodes,
-  size_t                node_size
</font><font color='#000088'>+  rtems_rbtree_control          *the_rbtree,
+  rtems_rbtree_compare_function  compare_function,
+  void                          *starting_address,
+  size_t                         number_nodes,
+  size_t                         node_size,
+  rtems_rbtree_unique            is_unique
</font> )
 {
   _RBTree_Initialize( the_rbtree, compare_function, starting_address,
<font color='#880000'>-    number_nodes, node_size);
</font><font color='#000088'>+    number_nodes, node_size, is_unique);
</font> }
 
 /**
<font color='#997700'>@@ -52,11 +53,12 @@
</font>  *  This routine initializes @a the_rbtree to contain zero nodes.
  */
 RTEMS_INLINE_ROUTINE void rtems_rbtree_initialize_empty(
<font color='#880000'>-  rtems_rbtree_control *the_rbtree,
-  void                 *compare_function
</font><font color='#000088'>+  rtems_rbtree_control          *the_rbtree,
+  rtems_rbtree_compare_function  compare_function,
+  rtems_rbtree_unique            is_unique
</font> )
 {
<font color='#880000'>-  _RBTree_Initialize_empty( the_rbtree, compare_function );
</font><font color='#000088'>+  _RBTree_Initialize_empty( the_rbtree, compare_function, is_unique );
</font> }
 
 /**
<font color='#997700'>@@ -257,6 +259,9 @@
</font>  *  This function returns a pointer to the node having key equal to the key
  *  of @a the_node if it exists within @a the_rbtree, and NULL if not.
  *  @a the_node has to be made up before a search.
<font color='#000088'>+ *
+ *  @note If the tree is not unique and contains duplicate keys, the set
+ *        of duplicate keys acts as FIFO.
</font>  */
 RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_find(
   rtems_rbtree_control *the_rbtree,
<font color='#997700'>@@ -382,13 +387,27 @@
</font>  *
  *  This routine inserts @a the_node on @a the_rbtree.
  *  It disables interrupts to ensure the atomicity of the insert operation.
<font color='#000088'>+ *
+ *  @retval 0 Successfully inserted.
+ *  @retval -1 NULL @a the_node.
+ *  @retval RBTree_Node* if one with equal key to the key of @a the_node exists
+ *          in an unique @a the_rbtree.
</font>  */
<font color='#880000'>-RTEMS_INLINE_ROUTINE void rtems_rbtree_insert(
</font><font color='#000088'>+RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_insert(
</font>   rtems_rbtree_control *the_rbtree,
   rtems_rbtree_node *the_node
 )
 {
<font color='#880000'>-  _RBTree_Insert( the_rbtree, the_node );
</font><font color='#000088'>+  return _RBTree_Insert( the_rbtree, the_node );
+}
+
+/** @brief Determines whether the tree is unique
+ */
+RTEMS_INLINE_ROUTINE rtems_rbtree_unique rtems_rbtree_is_unique(
+    rtems_rbtree_control *the_rbtree
+)
+{
+  return( _RBTree_Is_unique(the_rbtree) );
</font> }
 
 #endif

<font color='#006600'>diff -u rtems/cpukit/score/include/rtems/score/rbtree.h:1.5 rtems/cpukit/score/include/rtems/score/rbtree.h:1.6
--- rtems/cpukit/score/include/rtems/score/rbtree.h:1.5 Tue Aug  2 14:25:59 2011
+++ rtems/cpukit/score/include/rtems/score/rbtree.h     Sun Aug 21 15:07:11 2011
</font><font color='#997700'>@@ -100,6 +100,16 @@
</font> } RBTree_Direction;
 
 /**
<font color='#000088'>+ * This type defines function pointers for user-provided comparison
+ * function. The function compares two nodes in order to determine
+ * the order in a red-black tree.
+ */
+typedef int (*RBTree_Compare_function)(
+    RBTree_Node *node1,
+    RBTree_Node *node2
+);
+
+/**
</font>  *  @struct RBTree_Control
  *
  * This is used to manage a RBT.  A rbtree consists of a tree of zero or more
<font color='#997700'>@@ -126,11 +136,13 @@
</font>   /** This points to the min and max nodes of this RBT. */
   RBTree_Node *first[2];
   /**
<font color='#880000'>-   * Comparison function pointer. Keys to compare has to be found
</font><font color='#000088'>+   * Comparison function pointer. Keys to compare have to be found
</font>    * inside to maintain generality. It has to return 1 if first node
    * has higher key than second, -1 if lower, 0 if equal.
    */
<font color='#880000'>-  int (*compare_function) (RBTree_Node*, RBTree_Node*);
</font><font color='#000088'>+  RBTree_Compare_function compare_function;
+  /** Determines whether the tree accepts duplicate keys. */
+  bool is_unique;
</font> } RBTree_Control;
 
 /**
<font color='#997700'>@@ -142,7 +154,8 @@
</font>   .root = NULL, \
   .first[0] = NULL, \
   .first[1] = NULL, \
<font color='#880000'>-  .compare_function = NULL \
</font><font color='#000088'>+  .compare_function = NULL, \
+  .is_unique = 0 \
</font> }
 
 /**
<font color='#997700'>@@ -176,11 +189,12 @@
</font>  *  @a starting_address.  Each node is of @a node_size bytes.
  */
 void _RBTree_Initialize(
<font color='#880000'>-  RBTree_Control *the_rbtree,
-  void           *compare_function,
-  void           *starting_address,
-  size_t          number_nodes,
-  size_t          node_size
</font><font color='#000088'>+  RBTree_Control          *the_rbtree,
+  RBTree_Compare_function  compare_function,
+  void                    *starting_address,
+  size_t                   number_nodes,
+  size_t                   node_size,
+  bool                     is_unique
</font> );
 
 /**
<font color='#997700'>@@ -247,8 +261,8 @@
</font>  *
  *  @retval 0 Successfully inserted.
  *  @retval -1 NULL @a the_node.
<font color='#880000'>- *  @retval RBTree_Node* if one with equal value to @a the_node->value exists
- *          in @a the_rbtree.
</font><font color='#000088'>+ *  @retval RBTree_Node* if one with equal value to @a the_node 's key exists
+ *          in an unique @a the_rbtree.
</font>  *
  *  @note It does NOT disable interrupts to ensure the atomicity
  *        of the extract operation.
<font color='#997700'>@@ -263,10 +277,15 @@
</font>  *
  *  This routine inserts @a the_node on the tree @a the_rbtree.
  *
<font color='#000088'>+ *  @retval 0 Successfully inserted.
+ *  @retval -1 NULL @a the_node.
+ *  @retval RBTree_Node* if one with equal value to @a the_node 's key exists
+ *          in an unique @a the_rbtree.
+ *
</font>  *  @note It disables interrupts to ensure the atomicity
  *  of the extract operation.
  */
<font color='#880000'>-void _RBTree_Insert(
</font><font color='#000088'>+RBTree_Node *_RBTree_Insert(
</font>   RBTree_Control *the_rbtree,
   RBTree_Node *the_node
 );

<font color='#006600'>diff -u rtems/cpukit/score/inline/rtems/score/rbtree.inl:1.2 rtems/cpukit/score/inline/rtems/score/rbtree.inl:1.3
--- rtems/cpukit/score/inline/rtems/score/rbtree.inl:1.2        Tue Aug  2 14:25:59 2011
+++ rtems/cpukit/score/inline/rtems/score/rbtree.inl    Sun Aug 21 15:07:11 2011
</font><font color='#997700'>@@ -235,8 +235,9 @@
</font>  *  This routine initializes @a the_rbtree to contain zero nodes.
  */
 RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty(
<font color='#880000'>-    RBTree_Control *the_rbtree,
-    void           *compare_function
</font><font color='#000088'>+    RBTree_Control          *the_rbtree,
+    RBTree_Compare_function  compare_function,
+    bool                     is_unique
</font>     )
 {
   the_rbtree->permanent_null   = NULL;
<font color='#997700'>@@ -244,6 +245,7 @@
</font>   the_rbtree->first[0]         = NULL;
   the_rbtree->first[1]         = NULL;
   the_rbtree->compare_function = compare_function;
<font color='#000088'>+  the_rbtree->is_unique        = is_unique;
</font> }
 
 /** @brief Return a pointer to node's grandparent
<font color='#997700'>@@ -317,6 +319,9 @@
</font>  *  This function returns a pointer to the node in @a the_rbtree<span style="background-color: #FF0000"> </span>
  *  having key equal to key of  @a the_node if it exists,
  *  and NULL if not. @a the_node has to be made up before a search.
<font color='#000088'>+ *
+ *  @note If the tree is not unique and contains duplicate keys, the set
+ *        of duplicate keys acts as FIFO.
</font>  */
 RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Find_unprotected(
     RBTree_Control *the_rbtree,
<font color='#997700'>@@ -324,18 +329,21 @@
</font>     )
 {
   RBTree_Node* iter_node = the_rbtree->root;
<font color='#000088'>+  RBTree_Node* found = NULL;
</font>   int compare_result;
   while (iter_node) {
     compare_result = the_rbtree->compare_function(the_node, iter_node);
     if (compare_result == 0) {
<font color='#880000'>-        return(iter_node);
</font><font color='#000088'>+      found = iter_node;
+      if ( the_rbtree->is_unique )
+        break;
</font>     }
 
<font color='#880000'>-    RBTree_Direction dir = (compare_result != -1);
</font><font color='#000088'>+    RBTree_Direction dir = (compare_result == 1);
</font>     iter_node = iter_node->child[dir];
   } /* while(iter_node) */
 
<font color='#880000'>-  return 0;
</font><font color='#000088'>+  return found;
</font> }
 
 /** @brief Find the nodes in-order predecessor
<font color='#997700'>@@ -428,7 +436,6 @@
</font>   RBTree_Node *c;
   if (the_node == NULL) return;
   if (the_node->child[(1-dir)] == NULL) return;
<font color='#880000'>-<span style="background-color: #FF0000">  </span>
</font> 
   c = the_node->child[(1-dir)];
   the_node->child[(1-dir)] = c->child[dir];
<font color='#997700'>@@ -443,6 +450,15 @@
</font>   c->parent = the_node->parent;
   the_node->parent = c;
 }
<font color='#000088'>+
+/** @brief Determines whether the tree is unique
+ */
+RTEMS_INLINE_ROUTINE bool _RBTree_Is_unique(
+    RBTree_Control *the_rbtree
+)
+{
+  return( the_rbtree && the_rbtree->is_unique );
+}
</font> /**@}*/
 
 #endif

<font color='#006600'>diff -u rtems/cpukit/score/src/rbtree.c:1.4 rtems/cpukit/score/src/rbtree.c:1.5
--- rtems/cpukit/score/src/rbtree.c:1.4 Tue Aug  2 14:25:59 2011
+++ rtems/cpukit/score/src/rbtree.c     Sun Aug 21 15:07:11 2011
</font><font color='#997700'>@@ -32,11 +32,12 @@
</font>  */
 
 void _RBTree_Initialize(
<font color='#880000'>-  RBTree_Control *the_rbtree,
-  void           *compare_function,
-  void           *starting_address,
-  size_t         number_nodes,
-  size_t         node_size
</font><font color='#000088'>+  RBTree_Control          *the_rbtree,
+  RBTree_Compare_function  compare_function,
+  void                    *starting_address,
+  size_t                   number_nodes,
+  size_t                   node_size,
+  bool                     is_unique
</font> )
 {
   size_t      count;
<font color='#997700'>@@ -46,7 +47,7 @@
</font>   if (!the_rbtree) return;
 
   /* could do sanity checks here */
<font color='#880000'>-  _RBTree_Initialize_empty(the_rbtree, compare_function);
</font><font color='#000088'>+  _RBTree_Initialize_empty(the_rbtree, compare_function, is_unique);
</font> 
   count = number_nodes;
   next  = starting_address;

<font color='#006600'>diff -u rtems/cpukit/score/src/rbtreeinsert.c:1.3 rtems/cpukit/score/src/rbtreeinsert.c:1.4
--- rtems/cpukit/score/src/rbtreeinsert.c:1.3   Tue Aug  2 14:25:59 2011
+++ rtems/cpukit/score/src/rbtreeinsert.c       Sun Aug 21 15:07:11 2011
</font><font color='#997700'>@@ -72,7 +72,7 @@
</font>  *  @retval 0 Successfully inserted.
  *  @retval -1 NULL @a the_node.
  *  @retval RBTree_Node* if one with equal key to the key of @a the_node exists
<font color='#880000'>- *          in @a the_rbtree.
</font><font color='#000088'>+ *          in an unique @a the_rbtree.
</font>  *
  *  @note It does NOT disable interrupts to ensure the atomicity
  *        of the extract operation.
<font color='#997700'>@@ -97,7 +97,8 @@
</font>     /* typical binary search tree insert, descend tree to leaf and insert */
     while (iter_node) {
       compare_result = the_rbtree->compare_function(the_node, iter_node);
<font color='#880000'>-      if ( !compare_result ) return iter_node;
</font><font color='#000088'>+      if ( the_rbtree->is_unique && !compare_result )
+        return iter_node;
</font>       RBTree_Direction dir = (compare_result != -1);
       if (!iter_node->child[dir]) {
         the_node->child[RBT_LEFT] = the_node->child[RBT_RIGHT] = NULL;
<font color='#997700'>@@ -138,7 +139,7 @@
</font>  *    only case
  */
 
<font color='#880000'>-void _RBTree_Insert(
</font><font color='#000088'>+RBTree_Node *_RBTree_Insert(
</font>   RBTree_Control *tree,
   RBTree_Node *node
 )
<font color='#997700'>@@ -146,6 +147,6 @@
</font>   ISR_Level level;
 
   _ISR_Disable( level );
<font color='#880000'>-    _RBTree_Insert_unprotected( tree, node );
</font><font color='#000088'>+    return _RBTree_Insert_unprotected( tree, node );
</font>   _ISR_Enable( level );
 }
</pre>
<p> </p>
<a name='cs5'></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>2011-08-21 Petr Benes <benesp16@fel.cvut.cz>

        PR 1886/cpukit
        * sprbtree01/init.c, sprbtree01/sprbtree01.scn: This patch enables
        inserting duplicate keys into rbtree. It is possible to turn on this
        feature when initializing the tree.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/sptests/ChangeLog.diff?r1=text&tr1=1.473&r2=text&tr2=1.474&diff_format=h">M</a></td><td width='1%'>1.474</td><td width='100%'>testsuites/sptests/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/sptests/sprbtree01/init.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%'>testsuites/sptests/sprbtree01/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/sptests/sprbtree01/sprbtree01.scn.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>testsuites/sptests/sprbtree01/sprbtree01.scn</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/testsuites/sptests/ChangeLog:1.473 rtems/testsuites/sptests/ChangeLog:1.474
--- rtems/testsuites/sptests/ChangeLog:1.473    Thu Aug 18 02:47:07 2011
+++ rtems/testsuites/sptests/ChangeLog  Sun Aug 21 15:07:23 2011
</font><font color='#997700'>@@ -1,3 +1,10 @@
</font><font color='#000088'>+2011-08-21    Petr Benes <benesp16@fel.cvut.cz>
+
+       PR 1886/cpukit
+       * sprbtree01/init.c, sprbtree01/sprbtree01.scn: This patch enables
+       inserting duplicate keys into rbtree. It is possible to turn on this
+       feature when initializing the tree.
+
</font> 2011-08-18        Sebastian Huber <sebastian.huber@embedded-brains.de>
 
        * spfatal_support/init.c: Ensure that _Thread_BSP_context is

<font color='#006600'>diff -u rtems/testsuites/sptests/sprbtree01/init.c:1.5 rtems/testsuites/sptests/sprbtree01/init.c:1.6
--- rtems/testsuites/sptests/sprbtree01/init.c:1.5      Tue Aug  2 16:46:20 2011
+++ rtems/testsuites/sptests/sprbtree01/init.c  Sun Aug 21 15:07:23 2011
</font><font color='#997700'>@@ -100,8 +100,14 @@
</font>   puts( "\n\n*** TEST OF RTEMS RBTREE API ***" );
 
   puts( "Init - Initialize rbtree empty" );
<font color='#880000'>-  rtems_rbtree_initialize_empty( &rbtree1, &test_compare_function );
-<span style="background-color: #FF0000">  </span>
</font><font color='#000088'>+  rtems_rbtree_initialize_empty( &rbtree1, &test_compare_function,
+                                 RTEMS_RBTREE_UNIQUE );
+
+  if ( !rtems_rbtree_is_unique( &rbtree1 ) )
+    puts( "INIT - FAILED IS UNIQUE CHECK" );
+  if ( rtems_rbtree_is_unique( NULL ) )
+    puts( "INIT - FAILED IS UNIQUE CHECK" );
+
</font>   /* verify that the rbtree insert work */
   puts( "INIT - Verify rtems_rbtree_insert with two nodes" );
   node1.id = 1;
<font color='#997700'>@@ -111,7 +117,7 @@
</font>   rtems_rbtree_insert( &rbtree1, &node1.Node );
   rtems_rbtree_insert( &rbtree1, &node2.Node );
 
<font color='#880000'>-  p = _RBTree_Insert_unprotected( &rbtree1, NULL );
</font><font color='#000088'>+  p = rtems_rbtree_insert( &rbtree1, NULL );
</font>   if (p != (void *)(-1))
     puts( "INIT - FAILED NULL NODE INSERT" );
 
<font color='#997700'>@@ -149,7 +155,11 @@
</font>   puts("INIT - Verify rtems_rbtree_insert with the same value twice");
   node2.key = node1.key;
   rtems_rbtree_insert(&rbtree1, &node1.Node);
<font color='#880000'>-  rtems_rbtree_insert(&rbtree1, &node2.Node);
</font><font color='#000088'>+  p = rtems_rbtree_insert(&rbtree1, &node2.Node);
+
+  if (p != &node1.Node)
+    puts( "INIT - FAILED DUPLICATE INSERT" );
+
</font>   for ( p = rtems_rbtree_get_min(&rbtree1), id = 1 ; p ;
       p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
     test_node *t = rtems_rbtree_container_of(p,test_node,Node);
<font color='#997700'>@@ -527,7 +537,8 @@
</font>     node_array[i].key = i;
   }
   rtems_rbtree_initialize( &rbtree1, &test_compare_function,
<font color='#880000'>-                           &node_array[0].Node, 100, sizeof(test_node));
</font><font color='#000088'>+                           &node_array[0].Node, 100,
+                           sizeof(test_node), RTEMS_RBTREE_UNIQUE );
</font> 
   puts( "INIT - Removing 100 nodes" );
 
<font color='#997700'>@@ -553,6 +564,98 @@
</font>     rtems_test_exit(0);
   }
 
<font color='#000088'>+  /* Initialize the tree for duplicate keys */
+  puts( "Init - Initialize duplicate rbtree empty" );
+  rtems_rbtree_initialize_empty( &rbtree1, &test_compare_function,
+                                 RTEMS_RBTREE_DUPLICATE );
+
+  if ( rtems_rbtree_is_unique( &rbtree1 ) )
+    puts( "INIT - FAILED IS UNIQUE CHECK" );
+  if ( rtems_rbtree_is_unique( NULL ) )
+    puts( "INIT - FAILED IS UNIQUE CHECK" );
+
+  puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [0,99]" );
+  for (i = 0; i < 100; i++) {
+    node_array[i].id = i;
+    node_array[i].key = i%5;
+    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
+
+    if (!rb_assert(rbtree1.root) )
+      puts( "INIT - FAILED TREE CHECK" );
+  }
+
+  puts( "INIT - Verify rtems_rbtree_find in a duplicate tree" );
+  search_node.key = 2;
+  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
+  if(rtems_rbtree_container_of(p,test_node,Node)->id != 2) {
+    puts ("INIT - ERROR ON RBTREE ID MISMATCH");
+    rtems_test_exit(0);
+  }
+
+  puts( "INIT - Removing 100 nodes" );
+
+  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
+      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
+    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
+    if ( id > 99 ) {
+      puts( "INIT - TOO MANY NODES ON RBTREE" );
+      rtems_test_exit(0);
+    }
+    if ( t->id != ( ((id*5)%100) + (id/20) ) ) {
+      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
+      rtems_test_exit(0);
+    }
+
+    if (!rb_assert(rbtree1.root) )
+      puts( "INIT - FAILED TREE CHECK" );
+  }
+
+  if(!rtems_rbtree_is_empty(&rbtree1)) {
+    puts( "INIT - TREE NOT EMPTY" );
+    rtems_test_exit(0);
+  }
+
+  puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [99,0]" );
+  for (i = 0; i < 100; i++) {
+    node_array[i].id = 99-i;
+    node_array[i].key = (99-i)%5;
+    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
+
+    if (!rb_assert(rbtree1.root) )
+      puts( "INIT - FAILED TREE CHECK" );
+  }
+
+  puts( "INIT - Verify rtems_rbtree_find in a duplicate tree" );
+  search_node.key = 2;
+  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
+  if(rtems_rbtree_container_of(p,test_node,Node)->id != 97) {
+    puts ("INIT - ERROR ON RBTREE ID MISMATCH");
+    rtems_test_exit(0);
+  }
+
+  puts( "INIT - Removing 100 nodes" );
+
+  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
+      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
+    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
+    if ( id > 99 ) {
+      puts( "INIT - TOO MANY NODES ON RBTREE" );
+      rtems_test_exit(0);
+    }
+    if ( t->id != ( (((99-id)*5)%100) + (id/20) ) ) {
+      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
+      rtems_test_exit(0);
+    }
+
+    if (!rb_assert(rbtree1.root) )
+      puts( "INIT - FAILED TREE CHECK" );
+  }
+
+  if(!rtems_rbtree_is_empty(&rbtree1)) {
+    puts( "INIT - TREE NOT EMPTY" );
+    rtems_test_exit(0);
+  }
+
</font>   puts( "*** END OF RTEMS RBTREE API TEST ***" );
   rtems_test_exit(0);
 }

<font color='#006600'>diff -u rtems/testsuites/sptests/sprbtree01/sprbtree01.scn:1.3 rtems/testsuites/sptests/sprbtree01/sprbtree01.scn:1.4
--- rtems/testsuites/sptests/sprbtree01/sprbtree01.scn:1.3      Tue Aug  2 08:38:41 2011
+++ rtems/testsuites/sptests/sprbtree01/sprbtree01.scn  Sun Aug 21 15:07:23 2011
</font><font color='#997700'>@@ -24,4 +24,11 @@
</font> INIT - Removing 20 nodes
 INIT - Verify rtems_rbtree_initialize with 100 nodes value [0,99]
 INIT - Removing 100 nodes
<font color='#000088'>+Init - Initialize duplicate rbtree empty
+INIT - Verify rtems_rbtree_insert with 100 nodes value [0,99]
+INIT - Verify rtems_rbtree_find in a duplicate tree
+INIT - Removing 100 nodes
+INIT - Verify rtems_rbtree_insert with 100 nodes value [99,0]
+INIT - Verify rtems_rbtree_find in a duplicate tree
+INIT - Removing 100 nodes
</font> *** END OF RTEMS RBTREE API TEST ***
</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>