mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 23:34:47 -05:00
fix: async ops sanitizer false positives in timers (#4602)
This commit is contained in:
parent
efb022a50c
commit
3f489ae1ae
2 changed files with 10 additions and 6 deletions
|
@ -14,6 +14,12 @@ const GREEN_OK = green("ok");
|
|||
const YELLOW_IGNORED = yellow("ignored");
|
||||
const disabledConsole = new Console((): void => {});
|
||||
|
||||
function delay(n: number): Promise<void> {
|
||||
return new Promise((resolve: () => void, _) => {
|
||||
setTimeout(resolve, n);
|
||||
});
|
||||
}
|
||||
|
||||
function formatDuration(time = 0): string {
|
||||
const timeStr = `(${time}ms)`;
|
||||
return gray(italic(timeStr));
|
||||
|
@ -28,6 +34,10 @@ function assertOps(fn: () => void | Promise<void>): () => void | Promise<void> {
|
|||
return async function asyncOpSanitizer(): Promise<void> {
|
||||
const pre = metrics();
|
||||
await fn();
|
||||
// Defer until next event loop turn - that way timeouts and intervals
|
||||
// cleared can actually be removed from resource table, otherwise
|
||||
// false positives may occur (https://github.com/denoland/deno/issues/4591)
|
||||
await delay(0);
|
||||
const post = metrics();
|
||||
// We're checking diff because one might spawn HTTP server in the background
|
||||
// that will be a pending async op before test starts.
|
||||
|
|
|
@ -130,9 +130,6 @@ unitTest(
|
|||
assertEquals(c, 3);
|
||||
|
||||
clearInterval(t);
|
||||
// Defer for a moment to allow async op from `setInterval` to resolve;
|
||||
// for more explanation see `FIXME` in `cli/js/timers.ts::setGlobalTimeout`
|
||||
await defer(20);
|
||||
await resolvable;
|
||||
}
|
||||
);
|
||||
|
@ -153,9 +150,6 @@ unitTest(
|
|||
sig.dispose();
|
||||
|
||||
clearInterval(t);
|
||||
// Defer for a moment to allow async op from `setInterval` to resolve;
|
||||
// for more explanation see `FIXME` in `cli/js/timers.ts::setGlobalTimeout`
|
||||
await defer(20);
|
||||
await resolvable;
|
||||
}
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue