Repository navigation
The isolated step runs for every plugin of a pass, and again after it could not run - #271
Conversation
…nning On a Pi 5 a pass ran the step for one plugin; the next 151 read isolated.no-private-server, because jackd refused the name it had used for the first one. A step that did not run was then never tried again.
… could not run jackd now runs under a shell that waits for it. A pass is synchronous, so the sync could not reap jackd, and an unreaped jackd that had a client stayed in JACK's server table as alive: the next start under that name read 'server already active', and the step read isolated.no-private-server for every plugin after the first. A step that could not run decided nothing, so completeIsolated runs it again and puts the new step in its place, as the pass's own comment says. The fixture's worker can use no measurable CPU in the window, so the live test asks only for a figure.
|
What I measured on the Pi 5 (jackd 1.9.22~dfsg-4, plugin-qualify 0.18.2, plugin-hostd 0.15.4), with
The script that worked: What this shows:
I ran this working script only once, with two plugins, under bash. It differs from the wrapper in this PR in three ways: it runs under bash rather than A server name unique to each start would avoid the name clash, but as far as I remember JACK's server table has few slots, and an entry that looks alive holds one. I have not checked that. If a run needs it on the Pi, tell me: it can go in between two batches. |
The shell's trap sent a second TERM, and a jackd that did not end was then killed with its group, the shell included, so nothing reaped it and the next start read 'server already active'. Reproduced on Debian's jackd2 with a killed client. A TERM now reaches jackd once and giving up kills jackd alone: 8 restarts of 8 came up. Such a stop takes about 2 s.
On a Raspberry Pi 5,
plugin-qualify-sync --system --isolated-onlymeasured one plugin and readisolated.no-private-serverfor the next 151, exit 0.Cause. Each step starts a private
jackdwith the same name. A pass is synchronous, so the process never reaped thejackdit had stopped. Ajackdthat had a client leaves its entry in the server table, and a zombie counts as alive, so the next start exited withserver already active. Startingjackdunder a shell that stays as its parent made the second start work on the Pi. The existing live test ran the step only once.Fix.
jackdruns under a shell that waits for it, so it is reaped when it ends. The adapter pass uses the same starter.completeIsolatedruns anot-runstep again and replaces it. Before this, the record keptnot-runand no pass tried again, althoughisolatedPasssays one does.Tests. In the first commit, the new tests are red on CI with
isolated.no-private-serverandexpected undefined to be isolated.not-runstep is retried and replaced, and a refused one is not.the pass moves each pinasserted that a second pass does nothing, which was the bug. It now expects thenot-runstep to run again.cpuPercent > 0failed on CI once at 0, so that assertion is now>= 0.Not proven yet: a whole pass on the Pi with this build. The device is measuring. It runs once this is released.