projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into urcu/ht
[urcu.git]
/
urcu-ht.c
diff --git
a/urcu-ht.c
b/urcu-ht.c
index 9521c065d3914a943960221db9988d8810f84adc..b8777acae895ec8907ffbe6a6ddf1c5b4c37a912 100644
(file)
--- a/
urcu-ht.c
+++ b/
urcu-ht.c
@@
-372,6
+372,7
@@
static void ht_resize_grow(struct rcu_ht *ht)
new_size = old_size << 1;
new_t = calloc(1, sizeof(struct rcu_table)
+ (new_size * sizeof(struct rcu_ht_node *)));
new_size = old_size << 1;
new_t = calloc(1, sizeof(struct rcu_table)
+ (new_size * sizeof(struct rcu_ht_node *)));
+ new_t->size = new_size;
for (i = 0; i < old_size; i++) {
/*
for (i = 0; i < old_size; i++) {
/*
@@
-387,14
+388,15
@@
static void ht_resize_grow(struct rcu_ht *ht)
new_node = malloc(sizeof(struct rcu_ht_node));
new_node->key = node->key;
new_node->data = node->data;
new_node = malloc(sizeof(struct rcu_ht_node));
new_node->key = node->key;
new_node->data = node->data;
- new_node->next = new_t->tbl[hash]; /* add to head */
- new_t->tbl[hash] = new_node;
+ new_node->flags = node->flags;
+ new_node->next = new_t->tbl[hash]; /* link to first */
+ new_t->tbl[hash] = new_node; /* add to head */
node = node->next;
}
}
node = node->next;
}
}
-
smp_wmb(); /* write links before changing table
*/
- ht->t = new_t; /* Changing table and size atomically wrt lookups */
+
/* Changing table and size atomically wrt lookups
*/
+ rcu_assign_pointer(ht->t, new_t);
/* Ensure all concurrent lookups use new size and table */
synchronize_rcu();
/* Ensure all concurrent lookups use new size and table */
synchronize_rcu();
This page took
0.041872 seconds
and
4
git commands to generate.