23cbeb49ff
- Replace the module-level writeMessage with a private DapClient.#writeMessage that races sink.flush() against a 30 s cap and this.proc.exited, disposes the client, and rethrows on either failure. A wedged adapter stdin previously blocked writeMessage forever. - sendRequest fires the write in the background and attaches a passive promise.catch guard so the request timer's rejection cannot become an unhandled promise before the caller's await subscribes. This also lets the caller's timeoutMs win over a hung flush instead of waiting the full 30 s write cap. - #spawnSocketUnix and #spawnSocketClientAddr wrap the readiness / connect race in try/catch that kills proc before rethrowing. Add a private socketReadyTimeoutMs hook on DapSpawnOptions so tests do not have to wait the full 10 s socket cap. Regression tests cover all three failure modes: a wedged stdin flush must reject sendRequest at the caller timeout with no unhandledRejection, and the Unix + TCP client-addr spawn paths must terminate the detached adapter process when the socket never appears. Fixes #4233