From the #575 review. Every page render calls each plugin's template_head/footer/data; the wasm adapter serialises calls behind one mutex per plugin with a 10 s timeout applied only once the mutex is held. A plugin that sleeps ~9 s per hook (never tripping the timeout) or a 120 s run_job holding the mutex stalls every page render for that long.
Proposal: acquire the mutex with a short bound (1–2 s) for template_* hooks (decline with a log when it can't be acquired), keep the full wait for render_page/jobs; optionally run jobs on a separate instance in future. Also surface "instance busy/closed" in Admin → Plugins.
From the #575 review. Every page render calls each plugin's
template_head/footer/data; the wasm adapter serialises calls behind one mutex per plugin with a 10 s timeout applied only once the mutex is held. A plugin that sleeps ~9 s per hook (never tripping the timeout) or a 120 srun_jobholding the mutex stalls every page render for that long.Proposal: acquire the mutex with a short bound (1–2 s) for
template_*hooks (decline with a log when it can't be acquired), keep the full wait forrender_page/jobs; optionally run jobs on a separate instance in future. Also surface "instance busy/closed" in Admin → Plugins.