//------------------------------------------------------------------------------------- uint32 SystemInfo::countCPU() { static uint32 count = 0; if(count == 0) { int status = SIGAR_OK; sigar_t *sigarcpulist; sigar_cpu_list_t cpulist; sigar_open(&sigarcpulist); status = sigar_cpu_list_get(sigarcpulist, &cpulist); if (status != SIGAR_OK) { DEBUG_MSG(fmt::format("error: {} ({}) cpu_list_get\n", status, sigar_strerror(sigarcpulist, status))); count = 1; } else { count = cpulist.number; sigar_cpu_list_destroy(sigarcpulist, &cpulist); } sigar_close(sigarcpulist); } return count; }
int sigar_os_close(sigar_t *sigar) { kstat_close(sigar->kc); if (sigar->mib2.sd != -1) { close_mib2(&sigar->mib2); } if (sigar->ks.lcpu) { free(sigar->ks.cpu); free(sigar->ks.cpu_info); free(sigar->ks.cpuid); } if (sigar->pinfo) { free(sigar->pinfo); } if (sigar->cpulist.size != 0) { sigar_cpu_list_destroy(sigar, &sigar->cpulist); } if (sigar->plib) { dlclose(sigar->plib); } if (sigar->pargs) { sigar_cache_destroy(sigar->pargs); } free(sigar); return SIGAR_OK; }
JNIEXPORT jobjectArray SIGAR_JNIx(getCpuListNative) (JNIEnv *env, jobject sigar_obj) { int status; unsigned int i; sigar_cpu_list_t cpulist; jobjectArray cpuarray; jclass cls = SIGAR_FIND_CLASS("Cpu"); dSIGAR(NULL); if ((status = sigar_cpu_list_get(sigar, &cpulist)) != SIGAR_OK) { sigar_throw_error(env, jsigar, status); return NULL; } JAVA_SIGAR_INIT_FIELDS_CPU(cls); cpuarray = JENV->NewObjectArray(env, cpulist.number, cls, 0); SIGAR_CHEX; for (i=0; i<cpulist.number; i++) { jobject info_obj = JENV->AllocObject(env, cls); SIGAR_CHEX; JAVA_SIGAR_SET_FIELDS_CPU(cls, info_obj, cpulist.data[i]); JENV->SetObjectArrayElement(env, cpuarray, i, info_obj); SIGAR_CHEX; } sigar_cpu_list_destroy(sigar, &cpulist); return cpuarray; }