fix cpu_list for multi cpus on darwin
This commit is contained in:
parent
d35e406067
commit
b5785ebec1
|
@ -495,6 +495,43 @@ int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
|
|
||||||
int sigar_cpu_list_get(sigar_t *sigar, sigar_cpu_list_t *cpulist)
|
int sigar_cpu_list_get(sigar_t *sigar, sigar_cpu_list_t *cpulist)
|
||||||
{
|
{
|
||||||
|
#ifdef DARWIN
|
||||||
|
kern_return_t status;
|
||||||
|
mach_msg_type_number_t count;
|
||||||
|
processor_cpu_load_info_data_t *cpuload;
|
||||||
|
natural_t i, ncpu;
|
||||||
|
|
||||||
|
status = host_processor_info(mach_host_self(),
|
||||||
|
PROCESSOR_CPU_LOAD_INFO,
|
||||||
|
&ncpu,
|
||||||
|
(processor_info_array_t*)&cpuload,
|
||||||
|
&count);
|
||||||
|
|
||||||
|
if (status != KERN_SUCCESS) {
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
sigar_cpu_list_create(cpulist);
|
||||||
|
|
||||||
|
for (i=0; i<ncpu; i++) {
|
||||||
|
sigar_cpu_t *cpu;
|
||||||
|
|
||||||
|
SIGAR_CPU_LIST_GROW(cpulist);
|
||||||
|
|
||||||
|
cpu = &cpulist->data[cpulist->number++];
|
||||||
|
|
||||||
|
cpu->user = cpuload[i].cpu_ticks[CPU_STATE_USER];
|
||||||
|
cpu->sys = cpuload[i].cpu_ticks[CPU_STATE_SYSTEM];
|
||||||
|
cpu->idle = cpuload[i].cpu_ticks[CPU_STATE_IDLE];
|
||||||
|
cpu->nice = cpuload[i].cpu_ticks[CPU_STATE_NICE];
|
||||||
|
cpu->wait = 0; /*N/A*/
|
||||||
|
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle;
|
||||||
|
}
|
||||||
|
|
||||||
|
vm_deallocate(mach_task_self(), (vm_address_t)cpuload, count);
|
||||||
|
|
||||||
|
return SIGAR_OK;
|
||||||
|
#else
|
||||||
sigar_cpu_t *cpu;
|
sigar_cpu_t *cpu;
|
||||||
|
|
||||||
sigar_cpu_list_create(cpulist);
|
sigar_cpu_list_create(cpulist);
|
||||||
|
@ -503,6 +540,7 @@ int sigar_cpu_list_get(sigar_t *sigar, sigar_cpu_list_t *cpulist)
|
||||||
cpu = &cpulist->data[cpulist->number++];
|
cpu = &cpulist->data[cpulist->number++];
|
||||||
|
|
||||||
return sigar_cpu_get(sigar, cpu);
|
return sigar_cpu_get(sigar, cpu);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int sigar_uptime_get(sigar_t *sigar,
|
int sigar_uptime_get(sigar_t *sigar,
|
||||||
|
|
Loading…
Reference in New Issue