test: let the wedged-worker regression post its child-start first
The regression's script spun immediately after calling agent(), but the agent() continuation (which posts the child-start RPC) only runs on a microtask tick — the spin seized the worker's loop before the post, so the host never saw a child inside the waitFor window. A few await-null yields before the spin let the RPC out; the posted message needs no further worker-loop turns to reach the host, so the wedge still holds for the Cancel message the test is about.
This commit is contained in:
@@ -511,9 +511,13 @@ describe('dsh-workflow-workerthread', () => {
|
|||||||
// The stray child's start RPC reaches the host, then the script wedges
|
// The stray child's start RPC reaches the host, then the script wedges
|
||||||
// its own worker in a synchronous spin: the worker cannot process the
|
// its own worker in a synchronous spin: the worker cannot process the
|
||||||
// Cancel message, so it can relay NO ChildCancel RPC — only the host's
|
// Cancel message, so it can relay NO ChildCancel RPC — only the host's
|
||||||
// own children loop can deliver the explicit cancel in time.
|
// own children loop can deliver the explicit cancel in time. The
|
||||||
|
// microtask yields let the agent() continuation POST its child-start
|
||||||
|
// before the spin seizes the worker's loop (the posted message needs
|
||||||
|
// no further worker-loop turns to reach the host).
|
||||||
script: script(`
|
script: script(`
|
||||||
agent('wedged child')
|
agent('wedged child')
|
||||||
|
for (let i = 0; i < 20; i++) await null
|
||||||
const end = Date.now() + 1500
|
const end = Date.now() + 1500
|
||||||
while (Date.now() < end) {}
|
while (Date.now() < end) {}
|
||||||
return 'raced'
|
return 'raced'
|
||||||
|
|||||||
Reference in New Issue
Block a user