起動時にクラッシュ
「CPU frequency scaling」インジケーターは、Linux KernelのCPUfreqを利用してCPUのクロック数を調整しています。CPUやBIOS(EFI)などハードウェアがCPUfreqに対応していない場合、インジケーター起動時に以下のようにクラッシュします。
「詳細を表示」ボタンをクリックすると、クラッシュの詳細が表示されます。
クラッシュの概要
indicator-cpufreq crashed with ValueError in get_policy(): NULL pointer accessNULLポインターのアクセスでクラッシュしたと表示されています。
トレースバック
トレースバック(クラッシュした箇所)は以下のようになっています。
Traceback (most recent call last):
File "/usr/bin/indicator-cpufreq", line 79, in <module>
ind = MyIndicator(options.show_frequency)
File "/usr/lib/python3/dist-packages/indicator_cpufreq/indicator.py", line 99, in __init__
self.update_ui()
File "/usr/lib/python3/dist-packages/indicator_cpufreq/indicator.py", line 110, in update_ui
fmin, fmax, governor = cpufreq.get_policy(self.cpus[0])
File "/usr/lib/python3/dist-packages/indicator_cpufreq/cpufreq.py", line 143, in get_policy
policy = (p.contents.min, p.contents.max, p.contents.governor.decode())
ValueError: NULL pointer access
File "/usr/bin/indicator-cpufreq", line 79, in <module>
ind = MyIndicator(options.show_frequency)
File "/usr/lib/python3/dist-packages/indicator_cpufreq/indicator.py", line 99, in __init__
self.update_ui()
File "/usr/lib/python3/dist-packages/indicator_cpufreq/indicator.py", line 110, in update_ui
fmin, fmax, governor = cpufreq.get_policy(self.cpus[0])
File "/usr/lib/python3/dist-packages/indicator_cpufreq/cpufreq.py", line 143, in get_policy
policy = (p.contents.min, p.contents.max, p.contents.governor.decode())
ValueError: NULL pointer access
Launchpad
Launchpadにも以下のように不具合として報告されています。- NULL pointer access
- indicator-cpufreq crashed with ValueError in get_policy(): NULL pointer access
- indicator-cupufreq crashes with null pointer access error
ただし、インジケーター側で対処できることは、CPUfreqが有効になっていない時にエラー処理を行うことであり、CPUfreqの有効・無効はインジケーターで行えるものではありません。
直接的な原因
トレースバックから以下のコードでクラッシュしていることが分かります。def get_policy(cpu): p = _libcpufreq.cpufreq_get_policy(cpu) policy = (p.contents.min, p.contents.max, p.contents.governor.decode()) _libcpufreq.cpufreq_put_policy(p) return policy
CPUfreqが無効になっている場合、「_libcpufreq.cpufreq_get_policy」からNULLが返ります。
ここでNULLチェックをおこなっていないため、本現象が起きています。
対応について
いずれにせよ、CPUfreqが有効になっていないとクロック数の調整は行えません。また、ハードウェアがCPUfreqに対応していても、BIOS(EFI)の設定によっては無効になることもあります。
CPUfreqについては、「CPUfreq」を参考にしてください。