mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-11 09:22:54 -05:00
Fix tavl_delete for two-node trees
This commit is contained in:
parent
1ed9fff84c
commit
40f818daef
1 changed files with 8 additions and 6 deletions
|
|
@ -284,6 +284,13 @@ tavl_delete( Avlnode **root, void* data, AVL_CMP fcmp )
|
|||
|
||||
ber_memfree( p );
|
||||
|
||||
/* Update child thread */
|
||||
if ( q ) {
|
||||
for ( ; q->avl_bits[nside] == AVL_CHILD && q->avl_link[nside];
|
||||
q = q->avl_link[nside] ) ;
|
||||
q->avl_link[nside] = r;
|
||||
}
|
||||
|
||||
if ( !depth ) {
|
||||
*root = q;
|
||||
return data;
|
||||
|
|
@ -295,12 +302,7 @@ tavl_delete( Avlnode **root, void* data, AVL_CMP fcmp )
|
|||
side = pdir[depth];
|
||||
p->avl_link[side] = q;
|
||||
|
||||
/* Update child thread */
|
||||
if ( q ) {
|
||||
for ( ; q->avl_bits[nside] == AVL_CHILD && q->avl_link[nside];
|
||||
q = q->avl_link[nside] ) ;
|
||||
q->avl_link[nside] = r;
|
||||
} else {
|
||||
if ( !q ) {
|
||||
p->avl_bits[side] = AVL_THREAD;
|
||||
p->avl_link[side] = r;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue