From e38ea9f3184ebf945cc456292cb13164c28ae30d Mon Sep 17 00:00:00 2001 From: Lomanic Date: Sat, 1 Sep 2018 16:18:32 +0200 Subject: [PATCH] [process] Don't lose context in ProcessesWithContext() on Windows and Linux --- process/process_darwin.go | 26 +++++++------------------- process/process_linux.go | 2 +- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/process/process_darwin.go b/process/process_darwin.go index c949154..509ab3b 100644 --- a/process/process_darwin.go +++ b/process/process_darwin.go @@ -527,34 +527,22 @@ func Processes() ([]*Process, error) { } func ProcessesWithContext(ctx context.Context) ([]*Process, error) { - results := []*Process{} + out := []*Process{} - mib := []int32{CTLKern, KernProc, KernProcAll, 0} - buf, length, err := common.CallSyscall(mib) + pids, err := PidsWithContext(ctx) if err != nil { - return results, err + return out, err } - // get kinfo_proc size - k := KinfoProc{} - procinfoLen := int(unsafe.Sizeof(k)) - count := int(length / uint64(procinfoLen)) - - // parse buf to procs - for i := 0; i < count; i++ { - b := buf[i*procinfoLen : i*procinfoLen+procinfoLen] - k, err := parseKinfoProc(b) - if err != nil { - continue - } - p, err := NewProcess(int32(k.Proc.P_pid)) + for _, pid := range pids { + p, err := NewProcess(pid) if err != nil { continue } - results = append(results, p) + out = append(out, p) } - return results, nil + return out, nil } func parseKinfoProc(buf []byte) (KinfoProc, error) { diff --git a/process/process_linux.go b/process/process_linux.go index 6708173..f844101 100644 --- a/process/process_linux.go +++ b/process/process_linux.go @@ -1220,7 +1220,7 @@ func Processes() ([]*Process, error) { func ProcessesWithContext(ctx context.Context) ([]*Process, error) { out := []*Process{} - pids, err := Pids() + pids, err := PidsWithContext(ctx) if err != nil { return out, err }