From 6c2d91819a4f431fe18d8d966ead14dac10fad16 Mon Sep 17 00:00:00 2001 From: Benjamin Vedder Date: Thu, 14 Apr 2022 15:45:54 +0200 Subject: [PATCH] Squashed 'lispBM/lispBM/' changes from 10340fbf..077af235 077af235 small tweak to array-shrinker git-subtree-dir: lispBM/lispBM git-subtree-split: 077af235651edbe6507897a8a22d645af6601249 --- src/lbm_memory.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/lbm_memory.c b/src/lbm_memory.c index 6fa66cff..ee85c3d5 100644 --- a/src/lbm_memory.c +++ b/src/lbm_memory.c @@ -324,18 +324,40 @@ int lbm_memory_shrink(lbm_uint *ptr, unsigned int n) { if (status(ix+i) == END && i < n) { return 0; // cannot shrink allocation to a larger size } + switch(status(ix+i)) { + case START: + break; + case END: + break; + case START_END: + break; + case FREE_OR_USED: + break; + default: + break; + } + if (i == (n-1)) { if (status(ix+i) == END || - status(ix+i) == START_END) done = true; - if (i == 0) set_status(ix+i, START_END); - else set_status(ix+i, END); + status(ix+i) == START_END) { + done = true; + } + if (i == 0) { + set_status(ix+i, START_END); + } + else { + set_status(ix+i, END); + } break; } } + if (!done) { + i++; // move to next position, prev position should be END or START_END for (;i < ((bitmap_size << BITMAP_SIZE_SHIFT) - ix); i ++) if (status(ix+i) == END) { set_status(ix+i, FREE_OR_USED); + break; } } return 1;