Remove temporary uintptr values, as the garbage collector can move addresses from under them.

Signed-off-by: Ben Ridley <benridley29@gmail.com>
This commit is contained in:
Ben Ridley
2021-03-18 15:29:14 -07:00
parent 05f0f6f688
commit df2a7a9ec0
2 changed files with 16 additions and 22 deletions

View File

@@ -54,11 +54,9 @@ func GetLPPerformanceInfo() (LPPerformanceInformation, error) {
var pi LPPerformanceInformation var pi LPPerformanceInformation
size := (uint32)(unsafe.Sizeof(pi)) size := (uint32)(unsafe.Sizeof(pi))
pi.cb = size pi.cb = size
pPi := uintptr(unsafe.Pointer(&pi)) r1, _, err := procGetPerformanceInfo.Call(uintptr(unsafe.Pointer(&pi)), uintptr(size))
r1, _, err := procGetPerformanceInfo.Call(pPi, uintptr(size))
if ret := *(*bool)(unsafe.Pointer(&r1)); ret == false { if ret := *(*bool)(unsafe.Pointer(&r1)); !ret {
// returned false
return LPPerformanceInformation{}, err return LPPerformanceInformation{}, err
} }
@@ -70,26 +68,24 @@ func GetPerformanceInfo() (PerformanceInformation, error) {
var lppi LPPerformanceInformation var lppi LPPerformanceInformation
size := (uint32)(unsafe.Sizeof(lppi)) size := (uint32)(unsafe.Sizeof(lppi))
lppi.cb = size lppi.cb = size
pLppi := uintptr(unsafe.Pointer(&lppi)) r1, _, err := procGetPerformanceInfo.Call(uintptr(unsafe.Pointer(&lppi)), uintptr(size))
r1, _, err := procGetPerformanceInfo.Call(pLppi, uintptr(size))
if ret := *(*bool)(unsafe.Pointer(&r1)); ret == false { if ret := *(*bool)(unsafe.Pointer(&r1)); !ret {
// returned false
return PerformanceInformation{}, err return PerformanceInformation{}, err
} }
var pi PerformanceInformation var pi PerformanceInformation
pi.cb = lppi.cb pi.cb = lppi.cb
pi.CommitTotal = *(*uint32)(unsafe.Pointer(&lppi.CommitTotal)) pi.CommitTotal = *(lppi.CommitTotal)
pi.CommitLimit = *(*uint32)(unsafe.Pointer(&lppi.CommitLimit)) pi.CommitLimit = *(lppi.CommitLimit)
pi.CommitPeak = *(*uint32)(unsafe.Pointer(&lppi.CommitPeak)) pi.CommitPeak = *(lppi.CommitPeak)
pi.PhysicalTotal = *(*uint32)(unsafe.Pointer(&lppi.PhysicalTotal)) pi.PhysicalTotal = *(lppi.PhysicalTotal)
pi.PhysicalAvailable = *(*uint32)(unsafe.Pointer(&lppi.PhysicalAvailable)) pi.PhysicalAvailable = *(lppi.PhysicalAvailable)
pi.SystemCache = *(*uint32)(unsafe.Pointer(&lppi.SystemCache)) pi.SystemCache = *(lppi.SystemCache)
pi.KernelTotal = *(*uint32)(unsafe.Pointer(&lppi.KernelTotal)) pi.KernelTotal = *(lppi.KernelTotal)
pi.KernelPaged = *(*uint32)(unsafe.Pointer(&lppi.KernelPaged)) pi.KernelPaged = *(lppi.KernelPaged)
pi.KernelNonpaged = *(*uint32)(unsafe.Pointer(&lppi.KernelNonpaged)) pi.KernelNonpaged = *(lppi.KernelNonpaged)
pi.PageSize = *(*uint32)(unsafe.Pointer(&lppi.PageSize)) pi.PageSize = *(lppi.PageSize)
pi.HandleCount = lppi.HandleCount pi.HandleCount = lppi.HandleCount
pi.ProcessCount = lppi.ProcessCount pi.ProcessCount = lppi.ProcessCount
pi.ThreadCount = lppi.ThreadCount pi.ThreadCount = lppi.ThreadCount

View File

@@ -111,8 +111,7 @@ var (
func GlobalMemoryStatusEx() (MemoryStatus, error) { func GlobalMemoryStatusEx() (MemoryStatus, error) {
var mse memoryStatusEx var mse memoryStatusEx
mse.dwLength = (uint32)(unsafe.Sizeof(mse)) mse.dwLength = (uint32)(unsafe.Sizeof(mse))
pMse := uintptr(unsafe.Pointer(&mse)) r1, _, err := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&mse)))
r1, _, err := procGlobalMemoryStatusEx.Call(pMse)
if ret := *(*bool)(unsafe.Pointer(&r1)); ret == false { if ret := *(*bool)(unsafe.Pointer(&r1)); ret == false {
return MemoryStatus{}, err return MemoryStatus{}, err
@@ -134,8 +133,7 @@ func GlobalMemoryStatusEx() (MemoryStatus, error) {
// https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsysteminfo // https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsysteminfo
func GetSystemInfo() SystemInfo { func GetSystemInfo() SystemInfo {
var info lpSystemInfo var info lpSystemInfo
pInfo := uintptr(unsafe.Pointer(&info)) procGetSystemInfo.Call(uintptr(unsafe.Pointer(&info)))
procGetSystemInfo.Call(pInfo)
fmt.Printf("%+v", info) fmt.Printf("%+v", info)
return SystemInfo{ return SystemInfo{
Arch: ProcessorArchitecture(info.Arch.WProcessorArchitecture), Arch: ProcessorArchitecture(info.Arch.WProcessorArchitecture),