fix(process): fix the bug that the program is hung when getting the file name

pull/1182/head
kestrelcjx 4 years ago
parent 78065a7ce2
commit db054ec106

@ -12,6 +12,7 @@ import (
"reflect"
"strings"
"syscall"
"time"
"unicode/utf16"
"unsafe"
@ -720,13 +721,24 @@ func (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, er
continue
}
var fileName string
ch := make(chan struct{})
go func() {
var buf [syscall.MAX_LONG_PATH]uint16
n, err := windows.GetFinalPathNameByHandle(windows.Handle(file), &buf[0], syscall.MAX_LONG_PATH, 0)
if err != nil {
continue
return
}
fileName := string(utf16.Decode(buf[:n]))
fileName = string(utf16.Decode(buf[:n]))
ch <- struct{}{}
}()
select {
case <-time.NewTimer(100 * time.Millisecond).C:
continue
case <-ch:
fileInfo, _ := os.Stat(fileName)
if fileInfo.IsDir() {
continue
@ -740,6 +752,7 @@ func (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, er
fileExists[fileName] = true
}
}
}
return files, nil
}

@ -12,6 +12,7 @@ import (
"reflect"
"strings"
"syscall"
"time"
"unicode/utf16"
"unsafe"
@ -707,13 +708,24 @@ func (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, er
continue
}
var fileName string
ch := make(chan struct{})
go func() {
var buf [syscall.MAX_LONG_PATH]uint16
n, err := windows.GetFinalPathNameByHandle(windows.Handle(file), &buf[0], syscall.MAX_LONG_PATH, 0)
if err != nil {
continue
return
}
fileName := string(utf16.Decode(buf[:n]))
fileName = string(utf16.Decode(buf[:n]))
ch <- struct{}{}
}()
select {
case <-time.NewTimer(100 * time.Millisecond).C:
continue
case <-ch:
fileInfo, _ := os.Stat(fileName)
if fileInfo.IsDir() {
continue
@ -727,6 +739,7 @@ func (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, er
fileExists[fileName] = true
}
}
}
return files, nil
}

Loading…
Cancel
Save