Skip to content

stream_wrap: add HandleScope's in uv callbacks - #1078

Closed
indutny wants to merge 4 commits into
nodejs:v1.xfrom
indutny:fix/gh-1075
Closed

stream_wrap: add HandleScope's in uv callbacks#1078
indutny wants to merge 4 commits into
nodejs:v1.xfrom
indutny:fix/gh-1075

Conversation

@indutny

Copy link
Copy Markdown
Member

Ensure that no handles will leak into global HandleScope by adding
HandleScope's in all JS-calling libuv callbacks in stream_wrap.cc.

Fix: #1075

NOTE: WIP

Ensure that no handles will leak into global HandleScope by adding
HandleScope's in all JS-calling libuv callbacks in `stream_wrap.cc`.
Fix: nodejs#1075
Don't forget to call `MakeWeak` to ensure that instance objects are
garbage collectable.
Hold non-persistent reference in JS, rather than in C++ to avoid cycles.
Ensure no persistent-induced loops in C++-land by storing
`SecureContext` reference in JS-land.
@indutny

Copy link
Copy Markdown
MemberAuthor

Seems to be fixing the issue, cc @bnoordhuis

@indutny

Copy link
Copy Markdown
MemberAuthor

cc @iojs/crypto

Comment threadsrc/stream_wrap.cc

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What does this HandleScope do?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Captures all handles in this libuv callback? OnReadCommon calls OnRead() which might create handles.

@bnoordhuis

Copy link
Copy Markdown
Member

LGTM with comments. I don't have time to test right now but this fixes all the test failures when you throw an CHECK_EQ(number_of_handles, HandleScope::NumberOfHandles(isolate)) in the main loop?

@indutny

Copy link
Copy Markdown
MemberAuthor

Yep, it fixes all handle leaks.

@Fishrock123Fishrock123 mentioned this pull request Mar 6, 2015
indutny added a commit that referenced this pull request Mar 6, 2015
Ensure that no handles will leak into global HandleScope by adding
HandleScope's in all JS-calling libuv callbacks in `stream_wrap.cc`.
Fix: #1075
PR-URL: #1078
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
indutny added a commit that referenced this pull request Mar 6, 2015
Don't forget to call `MakeWeak` to ensure that instance objects are
garbage collectable.
PR-URL: #1078
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
indutny added a commit that referenced this pull request Mar 6, 2015
Hold non-persistent reference in JS, rather than in C++ to avoid cycles.
PR-URL: #1078
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
@indutny

Copy link
Copy Markdown
MemberAuthor

Landed in 583a868, dccb69a, c09c90c. Thank you!

@indutnyindutny closed this Mar 6, 2015
@indutny
indutny deleted the fix/gh-1075 branch March 6, 2015 16:06
rvagg added a commit that referenced this pull request Mar 6, 2015
Notable changes:
* buffer: New `Buffer#indexOf()` method, modelled off `Array#indexOf()`.
Accepts a String, Buffer or a Number. Strings are interpreted as UTF8.
(Trevor Norris) #561
* fs: `options` object properties in `'fs'` methods no longer perform a
`hasOwnProperty()` check, thereby allowing options objects to have
prototype properties that apply. (Jonathan Ong)
#635
* tls: A likely TLS memory leak was reported by PayPal. Some of the recent
changes in stream_wrap appear to be to blame. The initial fix is in
#1078, you can track the progress
toward closing the leak at
#1075 (Fedor Indutny).
* npm: Upgrade npm to 2.7.0. See npm CHANGELOG.md:
https://github.com/npm/npm/blob/master/CHANGELOG.md#v270-2015-02-26
for details including why this is a semver-minor when it could have
been semver-major.
* TC: Colin Ihrig (@cjihrig) resigned from the TC due to his desire to do
more code and fewer meetings.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@indutny@bnoordhuis