From ae8d57e650543103c5545d1a2fe18e667cc5c001 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Wed, 6 Jul 2016 13:19:21 -0400 Subject: [PATCH] stepcompress: Fix compress_bisect_add() infinite loop At high step speeds, it is possible to exit the inner scan due to integer truncation. Always update minadd or maxadd so that the outer loop always terminates. Signed-off-by: Kevin O'Connor --- klippy/stepcompress.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/klippy/stepcompress.c b/klippy/stepcompress.c index d39bbc32..569522a6 100644 --- a/klippy/stepcompress.c +++ b/klippy/stepcompress.c @@ -174,11 +174,15 @@ compress_bisect_add(struct stepcompress *sc) // Check if a greater or lesser add could extend the sequence int32_t maxreach = add*addfactor + maxinterval*(count+1); - if (maxreach < point.minp) + if (maxreach < point.minp) { + minadd = add; origmaxinterval = maxinterval; - else + } else { + maxadd = add; origmininterval = mininterval; + } + // See if next point would further limit the add range if ((minadd+1)*addfactor + origmaxinterval*(count+1) < point.minp) minadd = idiv_up(point.minp - origmaxinterval*(count+1) , addfactor) - 1;