Prevent exit callback instance leaks

De-references pty_baton's exit callback after it is called so it can be
automatically released, preventing leaked instances.

Adds basic implementation for Pipe's get_status() method and forces PTY
to wait for child process to exit to ensure exit callback is cleaned up.

Adds a test to check that exit callback is still called as usual.
This commit is contained in:
Leroy Hopson 2022-06-23 20:30:27 +07:00
parent 38927e0a3e
commit 0ae1d80abb
No known key found for this signature in database
GPG key ID: D2747312A6DB51AA
5 changed files with 24 additions and 4 deletions

View file

@ -445,8 +445,10 @@ static void pty_after_waitpid(uv_async_t *async) {
Array argv = Array::make(baton->exit_code, baton->signal_code);
if (baton->cb != nullptr && baton->cb->is_valid())
if (baton->cb != nullptr && baton->cb->is_valid()) {
baton->cb->call_funcv(argv);
baton->cb = (Ref<FuncRef>)nullptr;
}
uv_close((uv_handle_t *)async, pty_after_close);
}
@ -669,4 +671,4 @@ void PTYUnix::_register_methods() {
register_method("process", &PTYUnix::process);
}
void PTYUnix::_init() {}
void PTYUnix::_init() {}