summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/rbtreeextract.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-27 14:37:07 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-27 14:56:47 +0200
commite2fe881a87331e7e20dab95126a8860e42cdddf0 (patch)
treee792e1a31bc4e55a51606ab3526d191badb37da3 /cpukit/score/src/rbtreeextract.c
parentposix: Remove superfluous includes (diff)
downloadrtems-e2fe881a87331e7e20dab95126a8860e42cdddf0.tar.bz2
score: Simplify red-black tree debug support
Make the RBTree_Node layout independent of RTEMS_DEBUG (and all other build configuration options). This allows the use of this structure in Newlib. Update #3112.
Diffstat (limited to 'cpukit/score/src/rbtreeextract.c')
-rw-r--r--cpukit/score/src/rbtreeextract.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/cpukit/score/src/rbtreeextract.c b/cpukit/score/src/rbtreeextract.c
index 8a87b2d56c..e4eb8d88de 100644
--- a/cpukit/score/src/rbtreeextract.c
+++ b/cpukit/score/src/rbtreeextract.c
@@ -16,12 +16,28 @@ RB_GENERATE_REMOVE_COLOR( RBTree_Control, RBTree_Node, Node, static )
RB_GENERATE_REMOVE( RBTree_Control, RBTree_Node, Node, static )
+#if defined(RTEMS_DEBUG)
+static RBTree_Node *_RBTree_Find_root( const RBTree_Node *the_node )
+{
+ while ( true ) {
+ const RBTree_Node *potential_root;
+
+ potential_root = the_node;
+ the_node = _RBTree_Parent( the_node );
+
+ if ( the_node == NULL ) {
+ return potential_root;
+ }
+ }
+}
+#endif
+
void _RBTree_Extract(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
{
- _Assert( the_node->tree == the_rbtree );
+ _Assert( _RBTree_Find_root( the_node ) == _RBTree_Root( the_rbtree ) );
RB_REMOVE( RBTree_Control, the_rbtree, the_node );
_RBTree_Initialize_node( the_node );
}