Skip to content

Commit c15b9e7

Browse files
NightRaGitLab
authored andcommitted
[Commander]: Use windows.Handle
1 parent 8435803 commit c15b9e7

1 file changed

Lines changed: 12 additions & 13 deletions

File tree

helpers/process/job_windows.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type osCmd struct {
1717

1818
// A job object to helper ensure processes are killed, plus a Once
1919
// to ensure the job object is only closed one.
20-
jobObject uintptr
20+
jobObject windows.Handle
2121
once sync.Once
2222
}
2323

@@ -68,7 +68,7 @@ func (c *osCmd) closeJobObject() {
6868
return
6969
}
7070
c.once.Do(func() {
71-
windows.CloseHandle(windows.Handle(c.jobObject))
71+
windows.CloseHandle(c.jobObject)
7272
})
7373
}
7474

@@ -82,7 +82,7 @@ func setProcessGroup(c *exec.Cmd, useLegacyStrategy bool) {
8282
}
8383
}
8484

85-
func createJobObject() (uintptr, error) {
85+
func createJobObject() (windows.Handle, error) {
8686
jobObj, err := windows.CreateJobObject(nil, nil)
8787
if err != nil {
8888
return 0, fmt.Errorf("creating job object: %w", err)
@@ -102,31 +102,30 @@ func createJobObject() (uintptr, error) {
102102
return 0, fmt.Errorf("setting job object information: %w", err)
103103
}
104104

105-
return uintptr(jobObj), nil
105+
return jobObj, nil
106106
}
107107

108108
// Assign the process with specified PID to the specified job object. Processes created as children of that one will
109109
// also be assigned to the job. When the last handle on the job is closed, all associated processes will be terminated.
110-
func assignProcessToJobObject(pid int, jobObject uintptr) error {
110+
func assignProcessToJobObject(pid int, jobObject windows.Handle) error {
111111
procHandle, err := findProcessHandleFromPID(pid)
112112
if err != nil {
113113
return fmt.Errorf("failed to retrieve handle for process: %w", err)
114114
}
115+
defer windows.CloseHandle(procHandle)
115116

116-
if err = windows.AssignProcessToJobObject(windows.Handle(jobObject), windows.Handle(procHandle)); err != nil {
117+
if err = windows.AssignProcessToJobObject(jobObject, procHandle); err != nil {
117118
return fmt.Errorf("failed to assign process to job: %w", err)
118119
}
119120
return nil
120121
}
121122

122-
func findProcessHandleFromPID(pid int) (uintptr, error) {
123-
const da = windows.PROCESS_TERMINATE | windows.PROCESS_SET_QUOTA
124-
h, err := syscall.OpenProcess(da, false, uint32(pid))
123+
func findProcessHandleFromPID(pid int) (windows.Handle, error) {
124+
const desiredAccess = windows.PROCESS_TERMINATE | windows.PROCESS_SET_QUOTA
125+
handle, err := windows.OpenProcess(desiredAccess, false, uint32(pid))
125126
if err != nil {
126127
return 0, fmt.Errorf("calling OpenProcess: %w", err)
127128
}
128-
if uintptr(h) == 0 {
129-
return 0, fmt.Errorf("getting process handle for pid %q", pid)
130-
}
131-
return uintptr(h), nil
129+
130+
return handle, nil
132131
}

0 commit comments

Comments
 (0)