diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2019-01-06 17:27:50 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-06 17:27:50 -0800 |
commit | b83b07cb4748f983c21b08b2ba015561cf664989 (patch) | |
tree | 049a5ed444ae3724ee1fd96f1d8d8f187f3d94c8 /pkg/sysinfo/numcpu_windows.go | |
parent | 49a474c4b747bb83e36cda335ac3ae1ce5ae9f0a (diff) | |
parent | 43686072d3ff559abb0aea865509ae85f8a301de (diff) | |
download | podman-b83b07cb4748f983c21b08b2ba015561cf664989.tar.gz podman-b83b07cb4748f983c21b08b2ba015561cf664989.tar.bz2 podman-b83b07cb4748f983c21b08b2ba015561cf664989.zip |
Merge pull request #2082 from rhatdan/runc
Update vendor of runc
Diffstat (limited to 'pkg/sysinfo/numcpu_windows.go')
-rw-r--r-- | pkg/sysinfo/numcpu_windows.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/pkg/sysinfo/numcpu_windows.go b/pkg/sysinfo/numcpu_windows.go new file mode 100644 index 000000000..1d89dd550 --- /dev/null +++ b/pkg/sysinfo/numcpu_windows.go @@ -0,0 +1,37 @@ +// +build windows + +package sysinfo + +import ( + "runtime" + "unsafe" + + "golang.org/x/sys/windows" +) + +var ( + kernel32 = windows.NewLazySystemDLL("kernel32.dll") + getCurrentProcess = kernel32.NewProc("GetCurrentProcess") + getProcessAffinityMask = kernel32.NewProc("GetProcessAffinityMask") +) + +func numCPU() int { + // Gets the affinity mask for a process + var mask, sysmask uintptr + currentProcess, _, _ := getCurrentProcess.Call() + ret, _, _ := getProcessAffinityMask.Call(currentProcess, uintptr(unsafe.Pointer(&mask)), uintptr(unsafe.Pointer(&sysmask))) + if ret == 0 { + return 0 + } + // For every available thread a bit is set in the mask. + ncpu := int(popcnt(uint64(mask))) + return ncpu +} + +// NumCPU returns the number of CPUs which are currently online +func NumCPU() int { + if ncpu := numCPU(); ncpu > 0 { + return ncpu + } + return runtime.NumCPU() +} |