fix: fast setImmediate implementation #88346
Open
+4
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What?
Capture
setImmediate[promisify.custom]at module initialization instead of lazily accessing it when needed.This was discovered upgrading from
16.0.10to16.1.0Why?
When
util.promisify(setImmediate)is called andcurrentExecution === null, the code was accessingoriginalSetImmediate[promisify.custom]at call time. However,promisify.customcan get lost or returnundefinedafter the module patchessetImmediate, causingpromisify(setImmediate)to fail. Specifically, when used withjest.Reproduction: https://github.com/jgeschwendt/nextjs-setimmediate-promisify-repro
How?
Move the capture of
originalSetImmediate[promisify.custom]to module initialization time (alongsideoriginalSetImmediate,originalClearImmediate, andoriginalNextTick), ensuring the original promisified implementation is preserved before any patching occurs.