55#include < memory>
66#include " LibuvChildProcess.h"
77
8- hx::asys::libuv::system::LibuvChildProcess::LibuvChildProcess ()
9- : request(std::move(std::make_unique< uv_process_t >()) )
10- , options(std::move(std::make_unique< uv_process_options_t >()) )
11- , exitCallback(null() )
12- , closeCallback(null() )
8+ hx::asys::libuv::system::LibuvChildProcess::Ctx::Ctx ()
9+ : request()
10+ , options()
11+ , arguments( )
12+ , environment( )
1313 , containers(3 )
14+ , currentExitCode()
15+ , exitCallback(null())
1416{
15- hx::GCSetFinalizer (this , [](hx::Object* obj) -> void {
16- reinterpret_cast <LibuvChildProcess*>(obj)->~LibuvChildProcess ();
17- });
17+ }
18+
19+ hx::asys::libuv::system::LibuvChildProcess::LibuvChildProcess (Ctx* ctx, Writable oStdin, Readable oStdout, Readable oStderr) : ctx(ctx)
20+ {
21+ HX_OBJ_WB_NEW_MARKED_OBJECT (this );
22+
23+ stdio_in = oStdin;
24+ stdio_out = oStdout;
25+ stdio_err = oStderr;
1826}
1927
2028hx::asys::Pid hx::asys::libuv::system::LibuvChildProcess::pid ()
2129{
22- return request-> pid ;
30+ return ctx-> request . pid ;
2331}
2432
2533void hx::asys::libuv::system::LibuvChildProcess::sendSignal (hx::EnumBase signal, Dynamic cbSuccess, Dynamic cbFailure)
@@ -69,7 +77,7 @@ void hx::asys::libuv::system::LibuvChildProcess::sendSignal(hx::EnumBase signal,
6977 }
7078
7179 auto result = 0 ;
72- if ((result = uv_process_kill (request. get () , signum)) < 0 )
80+ if ((result = uv_process_kill (&ctx-> request , signum)) < 0 )
7381 {
7482 cbFailure (hx::asys::libuv::uv_err_to_enum (result));
7583 }
@@ -81,42 +89,19 @@ void hx::asys::libuv::system::LibuvChildProcess::sendSignal(hx::EnumBase signal,
8189
8290void hx::asys::libuv::system::LibuvChildProcess::exitCode (Dynamic cbSuccess, Dynamic cbFailure)
8391{
84- if (currentExitCode.has_value ())
92+ if (ctx-> currentExitCode .has_value ())
8593 {
86- cbSuccess (static_cast <int >(currentExitCode.value ()));
94+ cbSuccess (static_cast <int >(ctx-> currentExitCode .value ()));
8795 }
8896 else
8997 {
90- exitCallback = cbSuccess.mPtr ;
98+ ctx-> exitCallback . rooted = cbSuccess.mPtr ;
9199 }
92100}
93101
94102void hx::asys::libuv::system::LibuvChildProcess::close (Dynamic cbSuccess, Dynamic cbFailure)
95103{
96- closeCallback = cbSuccess.mPtr ;
97-
98- uv_close (reinterpret_cast <uv_handle_t *>(request.get ()), [](uv_handle_t * handle) {
99- auto gcZone = hx::AutoGCZone ();
100- auto process = std::unique_ptr<hx::RootedObject<hx::asys::libuv::system::LibuvChildProcess>>(reinterpret_cast <hx::RootedObject<hx::asys::libuv::system::LibuvChildProcess>*>(handle->data ));
101- auto callback = Dynamic (process->rooted ->closeCallback );
102-
103- if (null () != callback)
104- {
105- callback ();
106- }
107- });
108- }
109-
110- void hx::asys::libuv::system::LibuvChildProcess::__Mark (hx::MarkContext* __inCtx)
111- {
112- HX_MARK_MEMBER (exitCallback);
113- HX_MARK_MEMBER (closeCallback);
114- }
104+ uv_close (reinterpret_cast <uv_handle_t *>(&ctx->request ), hx::asys::libuv::clean_handle);
115105
116- #ifdef HXCPP_VISIT_ALLOCS
117- void hx::asys::libuv::system::LibuvChildProcess::__Visit (hx::VisitContext* __inCtx)
118- {
119- HX_VISIT_MEMBER (exitCallback);
120- HX_VISIT_MEMBER (closeCallback);
121- }
122- #endif
106+ cbSuccess ();
107+ }
0 commit comments