Skip to content

Worklets: fixed memleak in shareable and serializable#9393

Open
tshmieldev wants to merge 5 commits into
mainfrom
@tshmieldev/memleaks
Open

Worklets: fixed memleak in shareable and serializable#9393
tshmieldev wants to merge 5 commits into
mainfrom
@tshmieldev/memleaks

Conversation

@tshmieldev
Copy link
Copy Markdown
Member

@tshmieldev tshmieldev commented May 12, 2026

Summary

we did .release() on jsi value without freeing the memory, leaking ~20B per instance
fixed
👽

Test plan

Stuff works, allocation 1_000_000 jsi values in cpp and then releasing them leaks
but after ::operator delete'ing them no leak

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses a small but repeated memory leak when retaining jsi::Value wrappers after their owning JSI runtime has been torn down, by freeing the heap allocation while still intentionally skipping ~jsi::Value to avoid use-after-free crashes.

Changes:

  • In Shareable::~Shareable, when the host runtime is gone, free the released jsi::Value wrapper allocation via ::operator delete(...) instead of leaking it.
  • In cleanupIfRuntimeExists, when a runtime is no longer alive, free the released jsi::Value wrapper allocation via ::operator delete(...) instead of leaking it.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
packages/react-native-worklets/Common/cpp/worklets/SharedItems/Shareable.cpp Frees the jsi::Value wrapper allocation when skipping destruction after host runtime teardown.
packages/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h Frees the jsi::Value wrapper allocation in the “runtime dead” cleanup path while still skipping ~jsi::Value.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h Outdated
Comment thread packages/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h Outdated
Comment thread packages/react-native-worklets/Common/cpp/worklets/SharedItems/Shareable.cpp Outdated
Comment thread packages/react-native-worklets/Common/cpp/worklets/SharedItems/Shareable.cpp Outdated
Comment thread packages/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h Outdated
Comment thread packages/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants