Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Null-prototype NativeNamespace receivers for http response once:close/on:finish (~42k slow reads in fastify)

Open
#12,710 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
44/100
Issue type
Refactor
Clarity
Mostly clear
Activity status
Active
Tech stack
rust
Domain
backend

Research direction

Start at crates/perry-ext-http/src/server/response_payload.rs:191, then read push_event at :204 and event_callbacks at :211 to trace how the listener store is allocated and read. Compare the response receiver with the emitter instance layout described in linked issue #12689; done means the listener store is instance state on a declared layout instead of a separate null-prototype dictionary.

Written by the indexing model from the issue text.

Description

Found while measuring #12708 (object model step 6, 3b-ii).

The once('close')/on('finish') listener receivers in fastify are null-prototype objects, classified as NativeNamespace. They account for about 42k slow property reads under PERRY_PROBE_DIAG.

Birth site: crates/perry-ext-http/src/server/response_payload.rs:191. events() calls perry_ffi::alloc_null_proto_object. The object is read in push_event (:204) and event_callbacks (:211).

These objects have no layout, so every read takes the by-name path. This belongs with the http half of 3b-ii and the instance layouts in #12689: the listener store should become instance state on a declared layout (node keeps _events on the emitter), not a separate null-prototype dictionary.

Dominant language
Rust
Stars
4.9k
Forks
166
Avg merge
2h 54m
Merged PRs (30d)
922

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from PerryTS/perry

All issues in PerryTS/perry

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.