diff --git a/scripts/start-finalExec b/scripts/start-finalExec index dbd922b2..c457214f 100755 --- a/scripts/start-finalExec +++ b/scripts/start-finalExec @@ -513,11 +513,15 @@ elif [[ ${TYPE} == "CURSEFORGE" ]]; then if isPercentage "$INIT_MEMORY" || isPercentage "$MAX_MEMORY"; then # Convert to bytes -NORM_INIT_MEM=$(normalizeMemSize "$INIT_MEMORY") -NORM_MAX_MEM=$(normalizeMemSize "$MAX_MEMORY") -# Convert to MB -((NORM_INIT_MEM*=1048576)) -((NORM_MAX_MEM*=1048576)) +if ! NORM_INIT_MEM=$(normalizeMemSize "$INIT_MEMORY"); then + exit 1 +fi +if ! NORM_MAX_MEM=$(normalizeMemSize "$MAX_MEMORY"); then + exit 1 +fi +# Convert bytes to MB +((NORM_INIT_MEM/=1048576)) +((NORM_MAX_MEM/=1048576)) cat > "${FTB_DIR}/settings-local.sh" < 0.6) - scale=0.01 + # cgroup v2 unlimited is "max"; cgroup v1 uses a large sentinel (~2^63). + if [[ $mem == max || ! $mem =~ ^[0-9]+$ ]] || (( mem > 1 << 62 )); then + mem=$(awk '/MemTotal:/ { print $2 * 1024 }' /proc/meminfo) + fi + if ! [[ $mem =~ ^[0-9]+$ ]]; then + logError "Unable to determine memory limit for percentage value '$input'" + return 1 + fi + echo $((val * mem / 100)) + return 0 ;; esac - val=${1:0:-1} - echo $((val * scale * mem)) + echo $((val * scale)) } function compare_version() {