Fix review issues: race condition in invokeWithTimeout and mutex queue entry

- Add settled flag to invokeWithTimeout to prevent double-settling
- Create mutex queue entry with wrapped resolve before pushing to queue

Co-authored-by: xCyanGrizzly <53275238+xCyanGrizzly@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-05 13:17:56 +00:00
parent 2e242912af
commit 49b82a352b
2 changed files with 24 additions and 14 deletions

View File

@@ -88,18 +88,29 @@ export async function invokeWithTimeout<T>(
timeoutMs = INVOKE_TIMEOUT_MS
): Promise<T> {
return new Promise<T>((resolve, reject) => {
let settled = false;
const timer = setTimeout(() => {
reject(new Error(`TDLib invoke timed out after ${timeoutMs}ms for ${request._}`));
if (!settled) {
settled = true;
reject(new Error(`TDLib invoke timed out after ${timeoutMs}ms for ${request._}`));
}
}, timeoutMs);
(client.invoke(request) as Promise<T>)
.then((result) => {
clearTimeout(timer);
resolve(result);
if (!settled) {
settled = true;
clearTimeout(timer);
resolve(result);
}
})
.catch((err) => {
clearTimeout(timer);
reject(err);
if (!settled) {
settled = true;
clearTimeout(timer);
reject(err);
}
});
});
}