Index: sys/sys/tree.h =================================================================== --- sys/sys/tree.h +++ sys/sys/tree.h @@ -547,12 +547,13 @@ if (RB_RED_LEFT(sib, field)) \ RB_FLIP_LEFT(parent, field); \ else if (!RB_RED_RIGHT(sib, field)) { \ - RB_FLIP_LEFT(parent, field); \ RB_ROTATE_RIGHT(head, sib, elm, field); \ if (RB_RED_RIGHT(elm, field)) \ RB_FLIP_LEFT(sib, field); \ if (RB_RED_LEFT(elm, field)) \ - RB_FLIP_RIGHT(parent, field); \ + RB_BITS(parent, field) = RB_RED_R; \ + else \ + RB_BITS(parent, field) = 0; \ RB_BITS(elm, field) |= RB_RED_MASK; \ sib = elm; \ } \ @@ -577,12 +578,13 @@ if (RB_RED_RIGHT(sib, field)) \ RB_FLIP_RIGHT(parent, field); \ else if (!RB_RED_LEFT(sib, field)) { \ - RB_FLIP_RIGHT(parent, field); \ RB_ROTATE_LEFT(head, sib, elm, field); \ if (RB_RED_LEFT(elm, field)) \ RB_FLIP_RIGHT(sib, field); \ if (RB_RED_RIGHT(elm, field)) \ - RB_FLIP_LEFT(parent, field); \ + RB_BITS(parent, field) = RB_RED_L; \ + else \ + RB_BITS(parent, field) = 0; \ RB_BITS(elm, field) |= RB_RED_MASK; \ sib = elm; \ } \