Fix thread-safety issues in native bindings replacing Nan::Persistent with v8::Eternal#1419
Fix thread-safety issues in native bindings replacing Nan::Persistent with v8::Eternal#1419rmnilin wants to merge 3 commits intomscdex:masterfrom rmnilin:fix/replace-nan-persistent-with-v8-eternal
Nan::Persistent with v8::Eternal#1419Conversation
|
I don't understand how using a |
|
Is the underlying reason for the worker-related issues that |
|
Thank you for the feedback! Yes, the underlying issue with worker threads is related to the use of a static While the primary distinction between I've also created rmnilin/ssh2-1393-repro to test both the current implementation and this fix. |
|
Hello, any update on this PR ? We can't restart dynamically a worker because of this bug. |
|
I guess @mscdex just doesn't have enough time. |
|
Thank you so much for fixing this <3 It crashed our servers |
|
just ran into this issue as well... really need to merge these changes in if |
|
@rmnilin Can you include a test in this PR? Other than that, I am fine with these changes I guess. |
|
@mscdex Added the test 🤝 |
|
@rmnilin It looks like the new test will need to be skipped for older node versions. I think the best way to do that is to wrap the EDIT: There is also a lint error that needs to be fixed |
|
@mscdex I hadn't considered Node.js versions without the worker threads module. Thanks for pointing that out. I've also fixed the lint errors, and everything should be in order now. |
|
Missed another one lint issue, fixed again... |
|
Thanks, landed in dd5510c. |
This PR addresses thread-safety issues in the native bindings of the library. It replaces
Nan::Persistentwithv8::Eternalfor constructor storage in cipher and decipher classes.The previous implementation using
Nan::Persistentwas not thread-safe, leading to crashes and undefined behavior when these classes were accessed from multiple threads simultaneously. This was particularly problematic when ssh2 was used in multi-threaded environments, such as when imported in worker threads.Key changes:
v8::Eternalinstead of aNan::Persistent.Setmethod of theEternalhandle.These changes ensure thread-safe storage of constructor handles without altering the intended functionality of the modules.
This PR addresses issue #1393 and resolves the reported crashes and segmentation faults related to multi-threaded use of the ssh2 library.