_prop_rb_tree_insert_node() now returns true/false to indicate if the
insertion succeeded. Update existing usage that arranges for insertions to always succeed to assert that they do.
This commit is contained in:
parent
b612638bbf
commit
e0e4b153c9
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: prop_dictionary.c,v 1.30 2008/05/24 14:32:48 yamt Exp $ */
|
||||
/* $NetBSD: prop_dictionary.c,v 1.31 2008/06/17 21:29:47 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2006, 2007 The NetBSD Foundation, Inc.
|
||||
@ -268,6 +268,7 @@ _prop_dict_keysym_alloc(const char *key)
|
||||
prop_dictionary_keysym_t opdk, pdk;
|
||||
const struct rb_node *n;
|
||||
size_t size;
|
||||
bool rv;
|
||||
|
||||
/*
|
||||
* Check to see if this already exists in the tree. If it does,
|
||||
@ -325,7 +326,8 @@ _prop_dict_keysym_alloc(const char *key)
|
||||
_prop_dict_keysym_put(pdk);
|
||||
return (opdk);
|
||||
}
|
||||
_prop_rb_tree_insert_node(&_prop_dict_keysym_tree, &pdk->pdk_link);
|
||||
rv = _prop_rb_tree_insert_node(&_prop_dict_keysym_tree, &pdk->pdk_link);
|
||||
_PROP_ASSERT(rv == true);
|
||||
_PROP_MUTEX_UNLOCK(_prop_dict_keysym_tree_mutex);
|
||||
return (pdk);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: prop_number.c,v 1.17 2008/04/28 20:22:53 martin Exp $ */
|
||||
/* $NetBSD: prop_number.c,v 1.18 2008/06/17 21:29:47 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2006 The NetBSD Foundation, Inc.
|
||||
@ -244,6 +244,7 @@ _prop_number_alloc(const struct _prop_number_value *pnv)
|
||||
{
|
||||
prop_number_t opn, pn;
|
||||
struct rb_node *n;
|
||||
bool rv;
|
||||
|
||||
/*
|
||||
* Check to see if this already exists in the tree. If it does,
|
||||
@ -290,7 +291,8 @@ _prop_number_alloc(const struct _prop_number_value *pnv)
|
||||
_PROP_POOL_PUT(_prop_number_pool, pn);
|
||||
return (opn);
|
||||
}
|
||||
_prop_rb_tree_insert_node(&_prop_number_tree, &pn->pn_link);
|
||||
rv = _prop_rb_tree_insert_node(&_prop_number_tree, &pn->pn_link);
|
||||
_PROP_ASSERT(rv == true);
|
||||
_PROP_MUTEX_UNLOCK(_prop_number_tree_mutex);
|
||||
return (pn);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: prop_rb.c,v 1.8 2008/04/28 20:22:53 martin Exp $ */
|
||||
/* $NetBSD: prop_rb.c,v 1.9 2008/06/17 21:29:47 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
@ -151,7 +151,7 @@ rb_tree_reparent_nodes(struct rb_tree *rbt _PROP_ARG_UNUSED,
|
||||
KASSERT(RB_ROOT_P(new_father) || rb_tree_check_node(rbt, grandpa, NULL, false));
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
_prop_rb_tree_insert_node(struct rb_tree *rbt, struct rb_node *self)
|
||||
{
|
||||
struct rb_node *parent, *tmp;
|
||||
@ -176,6 +176,12 @@ _prop_rb_tree_insert_node(struct rb_tree *rbt, struct rb_node *self)
|
||||
*/
|
||||
while (!RB_SENTINEL_P(tmp)) {
|
||||
const int diff = (*compare_nodes)(tmp, self);
|
||||
if (__predict_false(diff == 0)) {
|
||||
/*
|
||||
* Node already exists; don't insert.
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
parent = tmp;
|
||||
KASSERT(diff != 0);
|
||||
if (diff < 0) {
|
||||
@ -267,6 +273,8 @@ _prop_rb_tree_insert_node(struct rb_tree *rbt, struct rb_node *self)
|
||||
*/
|
||||
_prop_rb_tree_check(rbt, true);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: prop_rb_impl.h,v 1.5 2008/04/28 20:22:53 martin Exp $ */
|
||||
/* $NetBSD: prop_rb_impl.h,v 1.6 2008/06/17 21:29:47 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
@ -125,7 +125,7 @@ struct rb_tree {
|
||||
};
|
||||
|
||||
void _prop_rb_tree_init(struct rb_tree *, const struct rb_tree_ops *);
|
||||
void _prop_rb_tree_insert_node(struct rb_tree *, struct rb_node *);
|
||||
bool _prop_rb_tree_insert_node(struct rb_tree *, struct rb_node *);
|
||||
struct rb_node *
|
||||
_prop_rb_tree_find(struct rb_tree *, const void *);
|
||||
void _prop_rb_tree_remove_node(struct rb_tree *, struct rb_node *);
|
||||
|
Loading…
Reference in New Issue
Block a user