@@ -2273,17 +2273,29 @@ static int GetDebugSignalHandlerMappingName(DWORD pid, wchar_t* buf,
22732273static void DebugProcess (const FunctionCallbackInfo<Value>& args) {
22742274 Environment* env = Environment::GetCurrent (args);
22752275 Isolate* isolate = args.GetIsolate ();
2276+
2277+ if (args.Length () != 1 ) {
2278+ env->ThrowError (" Invalid number of arguments." );
2279+ return ;
2280+ }
2281+
22762282 HANDLE process = nullptr ;
22772283 HANDLE thread = nullptr ;
22782284 HANDLE mapping = nullptr ;
22792285 wchar_t mapping_name[32 ];
22802286 LPTHREAD_START_ROUTINE* handler = nullptr ;
22812287 DWORD pid = 0 ;
22822288
2283- if (args.Length () != 1 ) {
2284- env->ThrowError (" Invalid number of arguments." );
2285- goto out;
2286- }
2289+ OnScopeLeave cleanup ([&]() {
2290+ if (process != nullptr )
2291+ CloseHandle (process);
2292+ if (thread != nullptr )
2293+ CloseHandle (thread);
2294+ if (handler != nullptr )
2295+ UnmapViewOfFile (handler);
2296+ if (mapping != nullptr )
2297+ CloseHandle (mapping);
2298+ });
22872299
22882300 CHECK (args[0 ]->IsNumber ());
22892301 pid = args[0 ].As <Integer>()->Value ();
@@ -2296,22 +2308,22 @@ static void DebugProcess(const FunctionCallbackInfo<Value>& args) {
22962308 if (process == nullptr ) {
22972309 isolate->ThrowException (
22982310 WinapiErrnoException (isolate, GetLastError (), " OpenProcess" ));
2299- goto out ;
2311+ return ;
23002312 }
23012313
23022314 if (GetDebugSignalHandlerMappingName (pid,
23032315 mapping_name,
23042316 arraysize (mapping_name)) < 0 ) {
23052317 env->ThrowErrnoException (errno, " sprintf" );
2306- goto out ;
2318+ return ;
23072319 }
23082320
23092321 mapping = OpenFileMappingW (FILE_MAP_READ, FALSE , mapping_name);
23102322 if (mapping == nullptr ) {
23112323 isolate->ThrowException (WinapiErrnoException (isolate,
23122324 GetLastError (),
23132325 " OpenFileMappingW" ));
2314- goto out ;
2326+ return ;
23152327 }
23162328
23172329 handler = reinterpret_cast <LPTHREAD_START_ROUTINE*>(
@@ -2323,7 +2335,7 @@ static void DebugProcess(const FunctionCallbackInfo<Value>& args) {
23232335 if (handler == nullptr || *handler == nullptr ) {
23242336 isolate->ThrowException (
23252337 WinapiErrnoException (isolate, GetLastError (), " MapViewOfFile" ));
2326- goto out ;
2338+ return ;
23272339 }
23282340
23292341 thread = CreateRemoteThread (process,
@@ -2337,26 +2349,16 @@ static void DebugProcess(const FunctionCallbackInfo<Value>& args) {
23372349 isolate->ThrowException (WinapiErrnoException (isolate,
23382350 GetLastError (),
23392351 " CreateRemoteThread" ));
2340- goto out ;
2352+ return ;
23412353 }
23422354
23432355 // Wait for the thread to terminate
23442356 if (WaitForSingleObject (thread, INFINITE) != WAIT_OBJECT_0) {
23452357 isolate->ThrowException (WinapiErrnoException (isolate,
23462358 GetLastError (),
23472359 " WaitForSingleObject" ));
2348- goto out;
2349- }
2350-
2351- out:
2352- if (process != nullptr )
2353- CloseHandle (process);
2354- if (thread != nullptr )
2355- CloseHandle (thread);
2356- if (handler != nullptr )
2357- UnmapViewOfFile (handler);
2358- if (mapping != nullptr )
2359- CloseHandle (mapping);
2360+ return ;
2361+ }
23602362}
23612363#endif // _WIN32
23622364
0 commit comments