From ab01078cd7e9f219f16deb9978287b914b7d08dd Mon Sep 17 00:00:00 2001 From: Leonid Yuriev Date: Thu, 10 Oct 2019 20:57:05 +0300 Subject: [PATCH] mdbx: refine/fix SORT_IMPL macro. Change-Id: Ifc2968ead891c97442cec85076f7824a285f84b8 --- src/elements/core.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/elements/core.c b/src/elements/core.c index a3adee6c..750984bd 100644 --- a/src/elements/core.c +++ b/src/elements/core.c @@ -938,7 +938,7 @@ static int lcklist_detach_locked(MDBX_env *env) { \ TYPE *hi = end - 1; \ TYPE *lo = begin; \ - while (top >= stack) { \ + while (true) { \ TYPE *mid = lo + ((hi - lo) >> 1); \ if (CMP(*mid, *lo)) \ SORT_SWAP(TYPE, *mid, *lo); \ @@ -971,9 +971,12 @@ static int lcklist_detach_locked(MDBX_env *env) { } while (left <= right); \ \ if (lo + SORT_THRESHOLD > right) { \ - if (left + SORT_THRESHOLD > hi) \ - SORT_POP(lo, hi); \ - else \ + if (left + SORT_THRESHOLD > hi) { \ + if (top == stack) \ + break; \ + else \ + SORT_POP(lo, hi); \ + } else \ lo = left; \ } else if (left + SORT_THRESHOLD > hi) \ hi = right; \