Turn the number of waiters behind a held mutex flag into an enter, backoff, or page remediation action.

guard contention The waiter count behind a held mutex flag is kept as a scalar, so the remediation action stays deterministic and never depends on closure or object identity.

Mutex Flag Remediation Report

waiters
mutex_flag.ts
Replay: real traced execution (multi-file project)
const waiters: number = 0;
const guardLimit: number = 2;
const acquired: number = 1;

let action: string = "enter";
if (waiters >= 1 && waiters <= guardLimit) {
    action = "backoff";
}
if (waiters > guardLimit) {
    action = "page";
}

console.log(`waiters=${waiters} acquired=${acquired} ${action}`);
const waiters: number = 1;
const guardLimit: number = 2;
const acquired: number = 1;

let action: string = "enter";
if (waiters >= 1 && waiters <= guardLimit) {
    action = "backoff";
}
if (waiters > guardLimit) {
    action = "page";
}

console.log(`waiters=${waiters} acquired=${acquired} ${action}`);
const waiters: number = 3;
const guardLimit: number = 2;
const acquired: number = 1;

let action: string = "enter";
if (waiters >= 1 && waiters <= guardLimit) {
    action = "backoff";
}
if (waiters > guardLimit) {
    action = "page";
}

console.log(`waiters=${waiters} acquired=${acquired} ${action}`);
  1. waiters ← 0, guardLimit ← 2, acquired ← 1, action ← enter

    1const waiters→ 0: number = 0;  //@waiters=1, 32const guardLimit→ 2: number = 2;3const acquired→ 1: number = 1;45let action→ enter: string = "enter";6if (waiters >= 1 && waiters <= guardLimit) {7    action = "backoff";8}9if (waiters > guardLimit) {10    action = "page";11}1213console.log(`waiters=${waiters0} acquired=${acquired1} ${actionenter}`);
    outputwaiters=0 acquired=1 enter
  1. waiters ← 1, guardLimit ← 2, acquired ← 1, action ← enter

    1const waiters→ 1: number = 1;2const guardLimit→ 2: number = 2;3const acquired→ 1: number = 1;45let action→ enter: string = "enter";6if (waiters >= 1 && waiters <= guardLimit) {
  2. if (waiters >= 1 && waiters <= guardLimit)

    5let action: string = "enter";6if (waiters1 >= 1 && waiters1 <= guardLimit2) {7    action = "backoff";8}
  3. console.log(`waiters=${waiters} acquired=${acquired} ${action}`);

    10    action = "page";11}1213console.log(`waiters=${waiters1} acquired=${acquired1} ${actionbackoff}`);
    outputwaiters=1 acquired=1 backoff
  1. waiters ← 3, guardLimit ← 2, acquired ← 1, action ← enter

    1const waiters→ 3: number = 3;2const guardLimit→ 2: number = 2;3const acquired→ 1: number = 1;45let action→ enter: string = "enter";6if (waiters >= 1 && waiters <= guardLimit) {
  2. if (waiters > guardLimit)

    7    action = "backoff";8}9if (waiters3 > guardLimit2) {10    action = "page";11}
  3. console.log(`waiters=${waiters} acquired=${acquired} ${action}`);

    10    action = "page";11}1213console.log(`waiters=${waiters3} acquired=${acquired1} ${actionpage}`);
    outputwaiters=3 acquired=1 page