mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
async_hooks: add an InactiveAsyncContextFrame class
This gives a class prototype for AsyncContextFrame that contains the required methods, so that when we swap the prototype, ActiveAsyncContextFrame methods are used instead. Previously, the methods were defined in AsyncContextFrame, so swapping the prototype didn't swap those static methods. Also, make the ActiveAsyncContextFrame extend from Map. Fixes: https://github.com/nodejs/node/issues/54503 PR-URL: https://github.com/nodejs/node/pull/54510 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
This commit is contained in:
parent
9bdf2ee1d1
commit
ef6b9ffc8d
@ -11,7 +11,7 @@ const {
|
||||
|
||||
let enabled_;
|
||||
|
||||
class ActiveAsyncContextFrame {
|
||||
class ActiveAsyncContextFrame extends Map {
|
||||
static get enabled() {
|
||||
return true;
|
||||
}
|
||||
@ -50,12 +50,7 @@ function checkEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
class AsyncContextFrame extends Map {
|
||||
constructor(store, data) {
|
||||
super(AsyncContextFrame.current());
|
||||
this.set(store, data);
|
||||
}
|
||||
|
||||
class InactiveAsyncContextFrame extends Map {
|
||||
static get enabled() {
|
||||
enabled_ ??= checkEnabled();
|
||||
return enabled_;
|
||||
@ -65,6 +60,13 @@ class AsyncContextFrame extends Map {
|
||||
static set(frame) {}
|
||||
static exchange(frame) {}
|
||||
static disable(store) {}
|
||||
}
|
||||
|
||||
class AsyncContextFrame extends InactiveAsyncContextFrame {
|
||||
constructor(store, data) {
|
||||
super(AsyncContextFrame.current());
|
||||
this.set(store, data);
|
||||
}
|
||||
|
||||
disable(store) {
|
||||
this.delete(store);
|
||||
|
@ -5,6 +5,7 @@ import { opendir } from 'node:fs/promises';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { describe, it } from 'node:test';
|
||||
import { sep } from 'node:path';
|
||||
import { strictEqual } from 'node:assert';
|
||||
|
||||
const python = process.env.PYTHON || (isWindows ? 'python' : 'python3');
|
||||
|
||||
@ -53,7 +54,8 @@ describe('AsyncContextFrame', {
|
||||
stdio: ['ignore', 'ignore', 'inherit'],
|
||||
});
|
||||
|
||||
await once(proc, 'exit');
|
||||
const [code] = await once(proc, 'exit');
|
||||
strictEqual(code, 0, `Test ${test} failed with exit code ${code}`);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user