fix CFRelease NULL crash on M5 Pro/Max (#29)

PR #27 added NULL checks in getFrequency() to handle missing
IOKit voltage-states properties on M5 chips (which lack E-cores).
However, the CFRelease calls added in PR #26 were not similarly
guarded. CFRelease(NULL) is undefined behavior per Apple docs and
crashes the process.

This adds NULL guards to the CFRelease calls so they are skipped
when the IOKit properties don't exist.

Fixes the remaining segfault from #25 that v0.2.0 did not resolve.
1 file changed
tree: 0710dd52a513ffd244f24afa5fa2e027a9288213
  1. .github/
  2. .copywrite.hcl
  3. .golangci.yaml
  4. cpu.go
  5. cpu_test.go
  6. examples_test.go
  7. go.mod
  8. go.sum
  9. incompatible.go
  10. incompatible_test.go
  11. LICENSE
  12. Makefile
  13. README.md
README.md

m1cpu

Go Reference MPL License Run CI Tests

The go-m1cpu module is a library for inspecting Apple Silicon CPUs in Go.

Use the m1cpu Go package for looking up the CPU frequency for Apple M1 and M2 CPUs.

Install

go get github.com/shoenig/go-m1cpu@latest

CGO

This package requires the use of CGO.

Extracting the CPU properties is done via Apple's IOKit framework, which is accessible only through system C libraries.

Example

Simple Go program to print Apple Silicon M1/M2 CPU speeds.

package main

import (
	"fmt"

	"github.com/shoenig/go-m1cpu"
)

func main() {
	fmt.Println("Apple Silicon", m1cpu.IsAppleSilicon())

	fmt.Println("pCore GHz", m1cpu.PCoreGHz())
	fmt.Println("eCore GHz", m1cpu.ECoreGHz())

	fmt.Println("pCore Hz", m1cpu.PCoreHz())
	fmt.Println("eCore Hz", m1cpu.ECoreHz())
}

Using go test to print out available information.

➜ go test -v -run Show
=== RUN   Test_Show
    cpu_test.go:42: pCore Hz 3504000000
    cpu_test.go:43: eCore Hz 2424000000
    cpu_test.go:44: pCore GHz 3.504
    cpu_test.go:45: eCore GHz 2.424
    cpu_test.go:46: pCore count 8
    cpu_test.go:47: eCoreCount 4
    cpu_test.go:50: pCore Caches 196608 131072 16777216
    cpu_test.go:53: eCore Caches 131072 65536 4194304
--- PASS: Test_Show (0.00s)

License

Open source under the MPL