diff --git a/src/unix/pty.cc b/src/unix/pty.cc index ce275fc7c..de50353f9 100644 --- a/src/unix/pty.cc +++ b/src/unix/pty.cc @@ -189,9 +189,22 @@ void SetupExitCallback(Napi::Env env, Napi::Function cb, pid_t pid) { exit_event->signal_code = WTERMSIG(stat_loc); } auto status = tsfn.BlockingCall(exit_event, callback); // In main thread - assert(status == napi_ok); + switch (status) { + case napi_closing: + break; - tsfn.Release(); + case napi_queue_full: + Napi::Error::Fatal("SetupExitCallback", "Queue was full"); + + case napi_ok: + if (tsfn.Release() != napi_ok) { + Napi::Error::Fatal("SetupExitCallback", "ThreadSafeFunction.Release() failed"); + } + break; + + default: + Napi::Error::Fatal("SetupExitCallback", "ThreadSafeFunction.BlockingCall() failed"); + } }); } diff --git a/src/win/conpty.cc b/src/win/conpty.cc index 8f4d2569e..f77ed3b80 100644 --- a/src/win/conpty.cc +++ b/src/win/conpty.cc @@ -107,9 +107,22 @@ void SetupExitCallback(Napi::Env env, Napi::Function cb, pty_baton* baton) { CloseHandle(baton->hOut); auto status = tsfn.BlockingCall(exit_event, callback); // In main thread - assert(status == napi_ok); + switch (status) { + case napi_closing: + break; - tsfn.Release(); + case napi_queue_full: + Napi::Error::Fatal("SetupExitCallback", "Queue was full"); + + case napi_ok: + if (tsfn.Release() != napi_ok) { + Napi::Error::Fatal("SetupExitCallback", "ThreadSafeFunction.Release() failed"); + } + break; + + default: + Napi::Error::Fatal("SetupExitCallback", "ThreadSafeFunction.BlockingCall() failed"); + } }); }