Skip to content
This repository was archived by the owner on Apr 2, 2026. It is now read-only.

fix: store Global<Context> ptr for libuv-compat callbacks#1315

Closed
littledivy wants to merge 2 commits intomainfrom
fix_local_context_ptr
Closed

fix: store Global<Context> ptr for libuv-compat callbacks#1315
littledivy wants to merge 2 commits intomainfrom
fix_local_context_ptr

Conversation

@littledivy
Copy link
Copy Markdown
Member

No description provided.

bartlomieju pushed a commit to bartlomieju/deno that referenced this pull request Feb 27, 2026
Instead of storing a `v8::Local<Context>` pointer in `loop_.data` at
the start of each event loop tick (which is only valid for that tick),
store a `v8::Global<Context>` via `Global::into_raw()` once during
`register_uv_loop`. V8 keeps the persistent-handle slot updated across
GC cycles, so the pointer remains valid for the lifetime of the runtime.
The raw Global is reconstructed and dropped in `JsRealmInner::destroy`.

Ported from denoland/deno_core#1315

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@bartlomieju
Copy link
Copy Markdown
Member

Closing in favor of denoland/deno#32361

bartlomieju added a commit to denoland/deno that referenced this pull request Feb 28, 2026
## Summary

- Store a `v8::Global<Context>` via `Global::into_raw()` once during
`register_uv_loop` instead of storing a `v8::Local<Context>` pointer at
the start of each event loop tick
- V8 keeps the persistent-handle slot updated across GC cycles, so the
pointer remains valid for the lifetime of the runtime
- The raw Global is reconstructed and properly dropped in
`JsRealmInner::destroy`
- Remove the per-tick `transmute` + `const` size assert that was
previously needed

Ported from denoland/deno_core#1315

Co-authored-by: Divy Srivastava <me@littledivy.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants