score/rbtree: Remove "unprotected" from API

This commit is contained in:
Sebastian Huber
2013-11-19 16:21:54 +01:00
parent 833dd90335
commit 4ea97d2449
19 changed files with 151 additions and 135 deletions

View File

@@ -34,17 +34,17 @@ void _POSIX_Keys_Free_memory(
key_id = the_key->Object.id;
search_node.key = key_id;
search_node.thread_id = 0;
iter = _RBTree_Find_unprotected( &_POSIX_Keys_Key_value_lookup_tree, &search_node.Key_value_lookup_node );
iter = _RBTree_Find( &_POSIX_Keys_Key_value_lookup_tree, &search_node.Key_value_lookup_node );
if ( !iter )
return;
/**
* find the smallest thread_id node in the rbtree.
*/
next = _RBTree_Next_unprotected( iter, RBT_LEFT );
next = _RBTree_Next( iter, RBT_LEFT );
p = _RBTree_Container_of( next, POSIX_Keys_Key_value_pair, Key_value_lookup_node );
while ( next != NULL && p->key == key_id) {
iter = next;
next = _RBTree_Next_unprotected( iter, RBT_LEFT );
next = _RBTree_Next( iter, RBT_LEFT );
p = _RBTree_Container_of( next, POSIX_Keys_Key_value_pair, Key_value_lookup_node );
}
@@ -53,8 +53,8 @@ void _POSIX_Keys_Free_memory(
*/
p = _RBTree_Container_of( iter, POSIX_Keys_Key_value_pair, Key_value_lookup_node );
while ( iter != NULL && p->key == key_id ) {
next = _RBTree_Next_unprotected( iter, RBT_RIGHT );
_RBTree_Extract_unprotected( &_POSIX_Keys_Key_value_lookup_tree, iter );
next = _RBTree_Next( iter, RBT_RIGHT );
_RBTree_Extract( &_POSIX_Keys_Key_value_lookup_tree, iter );
_Chain_Extract_unprotected( &p->Key_values_per_thread_node );
_POSIX_Keys_Key_value_pair_free( p );

View File

@@ -51,7 +51,7 @@ void *pthread_getspecific(
case OBJECTS_LOCAL:
search_node.key = key;
search_node.thread_id = _Thread_Executing->Object.id;
p = _RBTree_Find_unprotected( &_POSIX_Keys_Key_value_lookup_tree,
p = _RBTree_Find( &_POSIX_Keys_Key_value_lookup_tree,
&search_node.Key_value_lookup_node );
key_data = NULL;
if ( p ) {

View File

@@ -60,7 +60,7 @@ void _POSIX_Keys_Run_destructors(
* because Chain_Node is the first member of POSIX_Keys_Key_value_pair
* structure.
*/
_RBTree_Extract_unprotected(
_RBTree_Extract(
&_POSIX_Keys_Key_value_lookup_tree,
&iter->Key_value_lookup_node
);

View File

@@ -54,7 +54,7 @@ int pthread_setspecific(
value_pair_ptr->key = key;
value_pair_ptr->thread_id = _Thread_Executing->Object.id;
value_pair_ptr->value = value;
if ( _RBTree_Insert_unprotected( &_POSIX_Keys_Key_value_lookup_tree,
if ( _RBTree_Insert( &_POSIX_Keys_Key_value_lookup_tree,
&(value_pair_ptr->Key_value_lookup_node) ) ) {
_Freechain_Put( (Freechain_Control *)&_POSIX_Keys_Keypool,
(void *) value_pair_ptr );

View File

@@ -26,6 +26,20 @@
extern "C" {
#endif
/**
* @defgroup ClassicRBTrees Red-Black Trees
*
* @ingroup ClassicRTEMS
*
* @brief A Red-Black Tree container.
*
* The red-black tree container offers no internal protection against
* concurrent access. The user must ensure that at most one thread at once can
* access a red-black tree instance.
*
* @{
*/
/**
* @typedef rtems_rbtree_node
*
@@ -299,45 +313,45 @@ RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_root(
}
/**
* @copydoc _RBTree_Find_unprotected()
* @copydoc _RBTree_Find()
*/
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_find_unprotected(
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_find(
const rtems_rbtree_control *the_rbtree,
const rtems_rbtree_node *the_node
)
{
return _RBTree_Find_unprotected( the_rbtree, the_node );
return _RBTree_Find( the_rbtree, the_node );
}
/**
* @copydoc _RBTree_Predecessor_unprotected()
* @copydoc _RBTree_Predecessor()
*/
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_predecessor_unprotected(
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_predecessor(
const rtems_rbtree_node *node
)
{
return _RBTree_Predecessor_unprotected( node );
return _RBTree_Predecessor( node );
}
/**
* @copydoc _RBTree_Successor_unprotected()
* @copydoc _RBTree_Successor()
*/
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_successor_unprotected(
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_successor(
const rtems_rbtree_node *node
)
{
return _RBTree_Successor_unprotected( node );
return _RBTree_Successor( node );
}
/**
* @copydoc _RBTree_Extract_unprotected()
* @copydoc _RBTree_Extract()
*/
RTEMS_INLINE_ROUTINE void rtems_rbtree_extract_unprotected(
RTEMS_INLINE_ROUTINE void rtems_rbtree_extract(
rtems_rbtree_control *the_rbtree,
rtems_rbtree_node *the_node
)
{
_RBTree_Extract_unprotected( the_rbtree, the_node );
_RBTree_Extract( the_rbtree, the_node );
}
/**
@@ -347,11 +361,11 @@ RTEMS_INLINE_ROUTINE void rtems_rbtree_extract_unprotected(
* a pointer to that node. If @a the_rbtree is empty, then NULL is returned.
*/
RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_get_min_unprotected(
RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_get_min(
rtems_rbtree_control *the_rbtree
)
{
return _RBTree_Get_unprotected( the_rbtree, RBT_LEFT );
return _RBTree_Get( the_rbtree, RBT_LEFT );
}
/**
@@ -361,11 +375,11 @@ RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_get_min_unprotected(
* a pointer to that node. If @a the_rbtree is empty, then NULL is returned.
*/
RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_get_max_unprotected(
RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_get_max(
rtems_rbtree_control *the_rbtree
)
{
return _RBTree_Get_unprotected( the_rbtree, RBT_RIGHT );
return _RBTree_Get( the_rbtree, RBT_RIGHT );
}
/**
@@ -397,24 +411,24 @@ RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_peek_max(
}
/**
* @copydoc _RBTree_Find_header_unprotected()
* @copydoc _RBTree_Find_header()
*/
RTEMS_INLINE_ROUTINE rtems_rbtree_control *rtems_rbtree_find_header_unprotected(
RTEMS_INLINE_ROUTINE rtems_rbtree_control *rtems_rbtree_find_header(
rtems_rbtree_node *the_node
)
{
return _RBTree_Find_header_unprotected( the_node );
return _RBTree_Find_header( the_node );
}
/**
* @copydoc _RBTree_Insert_unprotected()
* @copydoc _RBTree_Insert()
*/
RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_insert_unprotected(
RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_insert(
rtems_rbtree_control *the_rbtree,
rtems_rbtree_node *the_node
)
{
return _RBTree_Insert_unprotected( the_rbtree, the_node );
return _RBTree_Insert( the_rbtree, the_node );
}
/**
@@ -427,6 +441,8 @@ RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_unique(
return _RBTree_Is_unique(the_rbtree);
}
/** @} */
#ifdef __cplusplus
}
#endif

View File

@@ -80,7 +80,7 @@ static void insert_into_tree(
rtems_rbheap_chunk *chunk
)
{
_RBTree_Insert_unprotected(tree, &chunk->tree_node);
_RBTree_Insert(tree, &chunk->tree_node);
}
rtems_status_code rtems_rbheap_initialize(
@@ -198,7 +198,7 @@ static rtems_rbheap_chunk *find(rtems_rbtree_control *chunk_tree, uintptr_t key)
rtems_rbheap_chunk chunk = { .begin = key };
return rtems_rbheap_chunk_of_node(
_RBTree_Find_unprotected(chunk_tree, &chunk.tree_node)
_RBTree_Find(chunk_tree, &chunk.tree_node)
);
}
@@ -208,7 +208,7 @@ static rtems_rbheap_chunk *get_next(
)
{
return rtems_rbheap_chunk_of_node(
_RBTree_Next_unprotected(&chunk->tree_node, dir)
_RBTree_Next(&chunk->tree_node, dir)
);
}
@@ -230,7 +230,7 @@ static void check_and_merge(
a->size += b->size;
rtems_chain_extract_unprotected(&b->chain_node);
add_to_chain(free_chain, b);
_RBTree_Extract_unprotected(chunk_tree, &b->tree_node);
_RBTree_Extract(chunk_tree, &b->tree_node);
}
}

View File

@@ -216,13 +216,13 @@ void _RBTree_Initialize(
* and contains duplicate keys, the set of duplicate keys acts as FIFO.
* @retval NULL No node exists in the tree for the key.
*/
RBTree_Node *_RBTree_Find_unprotected(
RBTree_Node *_RBTree_Find(
const RBTree_Control *the_rbtree,
const RBTree_Node *the_node
);
/**
* @brief Insert @a the_node on the Red-Black Tree @a the_rbtree (unprotected).
* @brief Insert @a the_node on the Red-Black Tree @a the_rbtree.
*
* This routine inserts @a the_node on the Red-Black Tree @a the_rbtree.
*
@@ -231,17 +231,17 @@ RBTree_Node *_RBTree_Find_unprotected(
* @retval RBTree_Node* if one with equal value to @a the_node 's key exists
* in an unique @a the_rbtree.
*/
RBTree_Node *_RBTree_Insert_unprotected(
RBTree_Node *_RBTree_Insert(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
);
/**
* @brief Extracts (removes) @a the_node from @a the_rbtree (unprotected).
* @brief Extracts (removes) @a the_node from @a the_rbtree.
*
* This routine extracts (removes) @a the_node from @a the_rbtree.
*/
void _RBTree_Extract_unprotected(
void _RBTree_Extract(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
);
@@ -255,7 +255,7 @@ void _RBTree_Extract_unprotected(
* @retval NULL The in-order next node does not exist.
* @retval otherwise The next node.
*/
RBTree_Node *_RBTree_Next_unprotected(
RBTree_Node *_RBTree_Next(
const RBTree_Node *node,
RBTree_Direction dir
);
@@ -471,7 +471,7 @@ RTEMS_INLINE_ROUTINE bool _RBTree_Is_root(
* This function returns a pointer to the header of the Red Black
* Tree containing @a the_node if it exists, and NULL if not.
*/
RTEMS_INLINE_ROUTINE RBTree_Control *_RBTree_Find_header_unprotected(
RTEMS_INLINE_ROUTINE RBTree_Control *_RBTree_Find_header(
RBTree_Node *the_node
)
{
@@ -508,11 +508,11 @@ RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty(
* @retval NULL The predecessor does not exist. Otherwise it returns
* the predecessor node.
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor_unprotected(
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor(
const RBTree_Node *node
)
{
return _RBTree_Next_unprotected( node, RBT_LEFT );
return _RBTree_Next( node, RBT_LEFT );
}
/**
@@ -522,15 +522,15 @@ RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor_unprotected(
*
* @retval NULL The successor does not exist. Otherwise the successor node.
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor_unprotected(
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor(
const RBTree_Node *node
)
{
return _RBTree_Next_unprotected( node, RBT_RIGHT );
return _RBTree_Next( node, RBT_RIGHT );
}
/**
* @brief Get the first node (unprotected).
* @brief Get the first node.
*
* This function removes the minimum or maximum node from the_rbtree and
* returns a pointer to that node.
@@ -542,13 +542,13 @@ RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor_unprotected(
*
* @note This routine may return NULL if the RBTree is empty.
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Get_unprotected(
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Get(
RBTree_Control *the_rbtree,
RBTree_Direction dir
)
{
RBTree_Node *the_node = the_rbtree->first[dir];
_RBTree_Extract_unprotected(the_rbtree, the_node);
_RBTree_Extract(the_rbtree, the_node);
return the_node;
}

View File

@@ -43,7 +43,7 @@ extern "C" {
* @retval true Stop the iteration.
* @retval false Continue the iteration.
*
* @see _RBTree_Iterate_unprotected().
* @see _RBTree_Iterate().
*/
typedef bool (*RBTree_Visitor)(
const RBTree_Node *node,
@@ -59,7 +59,7 @@ typedef bool (*RBTree_Visitor)(
* @param[in] visitor The visitor.
* @param[in] visitor_arg The visitor argument.
*/
void _RBTree_Iterate_unprotected(
void _RBTree_Iterate(
const RBTree_Control *rbtree,
RBTree_Direction dir,
RBTree_Visitor visitor,

View File

@@ -43,7 +43,7 @@ void _RBTree_Initialize(
count = number_nodes;
next = starting_address;
while ( count-- ) {
_RBTree_Insert_unprotected(the_rbtree, next);
_RBTree_Insert(the_rbtree, next);
next = (RBTree_Node *)
_Addresses_Add_offset( (void *) next, node_size );
}

View File

@@ -21,7 +21,7 @@
* @note It does NOT disable interrupts to ensure the atomicity
* of the extract operation.
*/
static void _RBTree_Extract_validate_unprotected(
static void _RBTree_Extract_validate(
RBTree_Node *the_node
)
{
@@ -91,7 +91,7 @@ static void _RBTree_Extract_validate_unprotected(
* @note It does NOT disable interrupts to ensure the atomicity
* of the extract operation.
*/
void _RBTree_Extract_unprotected(
void _RBTree_Extract(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
@@ -105,7 +105,7 @@ void _RBTree_Extract_unprotected(
/* check if min needs to be updated */
if (the_node == the_rbtree->first[RBT_LEFT]) {
RBTree_Node *next;
next = _RBTree_Successor_unprotected(the_node);
next = _RBTree_Successor(the_node);
the_rbtree->first[RBT_LEFT] = next;
}
@@ -113,7 +113,7 @@ void _RBTree_Extract_unprotected(
* do not use else if here. */
if (the_node == the_rbtree->first[RBT_RIGHT]) {
RBTree_Node *previous;
previous = _RBTree_Predecessor_unprotected(the_node);
previous = _RBTree_Predecessor(the_node);
the_rbtree->first[RBT_RIGHT] = previous;
}
@@ -139,7 +139,7 @@ void _RBTree_Extract_unprotected(
leaf->parent = target->parent;
} else {
/* fix the tree here if the child is a null leaf. */
_RBTree_Extract_validate_unprotected(target);
_RBTree_Extract_validate(target);
}
victim_color = target->color;
dir = target != target->parent->child[0];
@@ -176,7 +176,7 @@ void _RBTree_Extract_unprotected(
leaf->parent = the_node->parent;
} else {
/* fix the tree here if the child is a null leaf. */
_RBTree_Extract_validate_unprotected(the_node);
_RBTree_Extract_validate(the_node);
}
victim_color = the_node->color;

View File

@@ -20,7 +20,7 @@
#include <rtems/score/rbtreeimpl.h>
#include <rtems/score/isr.h>
RBTree_Node *_RBTree_Find_unprotected(
RBTree_Node *_RBTree_Find(
const RBTree_Control *the_rbtree,
const RBTree_Node *the_node
)

View File

@@ -21,7 +21,7 @@
* @note It does NOT disable interrupts to ensure the atomicity of the
* append operation.
*/
static void _RBTree_Validate_insert_unprotected(
static void _RBTree_Validate_insert(
RBTree_Node *the_node
)
{
@@ -73,7 +73,7 @@ static void _RBTree_Validate_insert_unprotected(
* @note It does NOT disable interrupts to ensure the atomicity
* of the extract operation.
*/
RBTree_Node *_RBTree_Insert_unprotected(
RBTree_Node *_RBTree_Insert(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
@@ -118,7 +118,7 @@ RBTree_Node *_RBTree_Insert_unprotected(
} /* while(iter_node) */
/* verify red-black properties */
_RBTree_Validate_insert_unprotected(the_node);
_RBTree_Validate_insert(the_node);
}
return (RBTree_Node*)0;
}

View File

@@ -3,7 +3,7 @@
*
* @ingroup ScoreRBTree
*
* @brief _RBTree_Iterate_unprotected() implementation.
* @brief _RBTree_Iterate() implementation.
*/
/*
@@ -26,7 +26,7 @@
#include <rtems/score/rbtreeimpl.h>
void _RBTree_Iterate_unprotected(
void _RBTree_Iterate(
const RBTree_Control *rbtree,
RBTree_Direction dir,
RBTree_Visitor visitor,
@@ -40,6 +40,6 @@ void _RBTree_Iterate_unprotected(
while ( !stop && current != NULL ) {
stop = (*visitor)( current, dir, visitor_arg );
current = _RBTree_Next_unprotected( current, dir );
current = _RBTree_Next( current, dir );
}
}

View File

@@ -3,7 +3,7 @@
*
* @ingroup ScoreRBTree
*
* @brief _RBTree_Next_unprotected() and _RBTree_Next() implementation.
* @brief _RBTree_Next() and _RBTree_Next() implementation.
*/
/*
@@ -27,7 +27,7 @@
#include <rtems/score/rbtreeimpl.h>
#include <rtems/score/isr.h>
RBTree_Node *_RBTree_Next_unprotected(
RBTree_Node *_RBTree_Next(
const RBTree_Node *node,
RBTree_Direction dir
)

View File

@@ -31,6 +31,6 @@ void _Scheduler_EDF_Enqueue(
(Scheduler_EDF_Per_thread*) the_thread->scheduler_info;
RBTree_Node *node = &(sched_info->Node);
_RBTree_Insert_unprotected( &_Scheduler_EDF_Ready_queue, node );
_RBTree_Insert( &_Scheduler_EDF_Ready_queue, node );
sched_info->queue_state = SCHEDULER_EDF_QUEUE_STATE_YES;
}

View File

@@ -31,6 +31,6 @@ void _Scheduler_EDF_Extract(
(Scheduler_EDF_Per_thread*) the_thread->scheduler_info;
RBTree_Node *node = &(sched_info->Node);
_RBTree_Extract_unprotected( &_Scheduler_EDF_Ready_queue, node );
_RBTree_Extract( &_Scheduler_EDF_Ready_queue, node );
sched_info->queue_state = SCHEDULER_EDF_QUEUE_STATE_NOT_PRESENTLY;
}

View File

@@ -35,8 +35,8 @@ void _Scheduler_EDF_Yield( Thread_Control *thread )
* The RBTree has more than one node, enqueue behind the tasks
* with the same priority in case there are such ones.
*/
_RBTree_Extract_unprotected( &_Scheduler_EDF_Ready_queue, thread_node );
_RBTree_Insert_unprotected( &_Scheduler_EDF_Ready_queue, thread_node );
_RBTree_Extract( &_Scheduler_EDF_Ready_queue, thread_node );
_RBTree_Insert( &_Scheduler_EDF_Ready_queue, thread_node );
_ISR_Flash( level );