Crash when we get the percentages wrong.

Better to crash with an assertion than to get into an infinite loop.
We cold work around this, but there's a bug here and it's not a
rounding bug, so it's better not to conceal it.
This commit is contained in:
Fernando Tarlá Cardoso Lemos 2011-01-25 21:47:37 -02:00 committed by Michael Stapelberg
parent 485555ef72
commit 89917976c7

View File

@ -118,9 +118,12 @@ void render_con(Con *con, bool render_fullscreen) {
double percentage = child->percent > 0.0 ? child->percent : 1.0 / children; double percentage = child->percent > 0.0 ? child->percent : 1.0 / children;
assigned += sizes[i++] = percentage * total; assigned += sizes[i++] = percentage * total;
} }
assert(assigned == total ||
(assigned > total && assigned - total <= children * 2) ||
(assigned < total && total - assigned <= children * 2));
int signal = assigned < total ? 1 : -1; int signal = assigned < total ? 1 : -1;
while (assigned != total) { while (assigned != total) {
for (i = 0; i < children && assigned < total; ++i) { for (i = 0; i < children && assigned != total; ++i) {
sizes[i] += signal; sizes[i] += signal;
assigned += signal; assigned += signal;
} }