diff options
| author | Kagami Sascha Rosylight <saschanaz@outlook.com> | 2024-01-08 04:28:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-08 12:28:13 +0900 |
| commit | 0c2118e9630939eb709c84049bdc8e0fbae8ec11 (patch) | |
| tree | 46fcbd78dfabc5e7062db6826207f3fc34c93d61 /packages/backend/src/misc | |
| parent | refactor(frontend): extract game engine from vue component (diff) | |
| download | misskey-0c2118e9630939eb709c84049bdc8e0fbae8ec11.tar.gz misskey-0c2118e9630939eb709c84049bdc8e0fbae8ec11.tar.bz2 misskey-0c2118e9630939eb709c84049bdc8e0fbae8ec11.zip | |
refactor: make sure promises are settled before app shutdown (#12942)
👍
Diffstat (limited to 'packages/backend/src/misc')
| -rw-r--r-- | packages/backend/src/misc/promise-tracker.ts | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/packages/backend/src/misc/promise-tracker.ts b/packages/backend/src/misc/promise-tracker.ts new file mode 100644 index 0000000000..c7166c6de9 --- /dev/null +++ b/packages/backend/src/misc/promise-tracker.ts @@ -0,0 +1,23 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +const promiseRefs: Set<WeakRef<Promise<unknown>>> = new Set(); + +/** + * This tracks promises that other modules decided not to wait for, + * and makes sure they are all settled before fully closing down the server. + */ +export function trackPromise(promise: Promise<unknown>) { + if (process.env.NODE_ENV !== 'test') { + return; + } + const ref = new WeakRef(promise); + promiseRefs.add(ref); + promise.finally(() => promiseRefs.delete(ref)); +} + +export async function allSettled(): Promise<void> { + await Promise.allSettled([...promiseRefs].map(r => r.deref())); +} |