mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-23 21:22:17 +00:00
MINOR: ebtree: update the eb32sc parent node's scope on delete
During a delete operation, if the deleted node is above its leaf's parent, this parent will replace the node and then go up. In this case it is important to update the new parent's scope to reflect the presence of other branches. It's worth noting that in theory we should precisely recompute the exact node value, but it seems that it's not worth it for the rare cases there is a mismatch.
This commit is contained in:
parent
5d19fd479a
commit
ef8d0dcefd
@ -370,12 +370,14 @@ void eb32sc_delete(struct eb32sc_node *eb32)
|
|||||||
|
|
||||||
/* From now on, <node> and <parent> are necessarily different, and the
|
/* From now on, <node> and <parent> are necessarily different, and the
|
||||||
* <node>'s node part is in use. By definition, <parent> is at least
|
* <node>'s node part is in use. By definition, <parent> is at least
|
||||||
* below <node>, so keeping its key for the bit string is OK.
|
* below <node>, so keeping its key for the bit string is OK. However
|
||||||
|
* its scope must be enlarged to cover the new branch it absorbs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
parent->node_p = node->node_p;
|
parent->node_p = node->node_p;
|
||||||
parent->branches = node->branches;
|
parent->branches = node->branches;
|
||||||
parent->bit = node->bit;
|
parent->bit = node->bit;
|
||||||
|
container_of(parent, struct eb32sc_node, node)->node_s |= eb32->node_s;
|
||||||
|
|
||||||
/* We must now update the new node's parent... */
|
/* We must now update the new node's parent... */
|
||||||
gpside = eb_gettag(parent->node_p);
|
gpside = eb_gettag(parent->node_p);
|
||||||
|
Loading…
Reference in New Issue
Block a user