components/python/psutil/patches/02-cpu-kstat-fix.patch
changeset 5793 baf73b0669ce
equal deleted inserted replaced
5792:a1fd0a72acdb 5793:baf73b0669ce
       
     1 Upstream patch to fix issue #496. https://github.com/giampaolo/psutil/issues/496
       
     2 Pulled from https://github.com/giampaolo/psutil/commit/f1275c19ac9e77b9169ca84dfb7d7701a8a2f9d7
       
     3 
       
     4 Issue is fixed in psutil 2.2.0, but the module is pinned to >= 1.1.1, < 2.0.0
       
     5 by OpenStack requirements.
       
     6 
       
     7 Should psutil be updated to or past 2.2.0, this patch can be removed.
       
     8 
       
     9 --- psutil-1.2.1/psutil/_psutil_sunos.c.orig	2016-04-15 12:57:05.971196362 -0700
       
    10 +++ psutil-1.2.1/psutil/_psutil_sunos.c	2016-04-15 12:58:51.079231642 -0700
       
    11 @@ -445,29 +445,24 @@
       
    12          goto error;
       
    13      }
       
    14 
       
    15 -    numcpus = sysconf(_SC_NPROCESSORS_ONLN) - 1;
       
    16 -    for (i=0; i<=numcpus; i++) {
       
    17 -        ksp = kstat_lookup(kc, "cpu_stat", i, NULL);
       
    18 -        if (ksp == NULL) {
       
    19 -            PyErr_SetFromErrno(PyExc_OSError);
       
    20 -            goto error;
       
    21 -        }
       
    22 -        if (kstat_read(kc, ksp, &cs) == -1) {
       
    23 -            PyErr_SetFromErrno(PyExc_OSError);
       
    24 -            goto error;
       
    25 -        }
       
    26 -
       
    27 -        py_cputime = Py_BuildValue("ffff",
       
    28 -                                   (float)cs.cpu_sysinfo.cpu[CPU_USER],
       
    29 -                                   (float)cs.cpu_sysinfo.cpu[CPU_KERNEL],
       
    30 -                                   (float)cs.cpu_sysinfo.cpu[CPU_IDLE],
       
    31 -                                   (float)cs.cpu_sysinfo.cpu[CPU_WAIT]);
       
    32 -        if (py_cputime == NULL)
       
    33 -            goto error;
       
    34 -        if (PyList_Append(py_retlist, py_cputime))
       
    35 -            goto error;
       
    36 -        Py_DECREF(py_cputime);
       
    37 -
       
    38 +    for (ksp = kc->kc_chain; ksp != NULL; ksp = ksp->ks_next) {
       
    39 +        if (strcmp(ksp->ks_module, "cpu_stat") == 0) {
       
    40 +            if (kstat_read(kc, ksp, &cs) == -1) {
       
    41 +                PyErr_SetFromErrno(PyExc_OSError);
       
    42 +                goto error;
       
    43 +            }
       
    44 +            py_cputime = Py_BuildValue("ffff",
       
    45 +                                       (float)cs.cpu_sysinfo.cpu[CPU_USER],
       
    46 +                                       (float)cs.cpu_sysinfo.cpu[CPU_KERNEL],
       
    47 +                                       (float)cs.cpu_sysinfo.cpu[CPU_IDLE],
       
    48 +                                       (float)cs.cpu_sysinfo.cpu[CPU_WAIT]);
       
    49 +            if (py_cputime == NULL)
       
    50 +                goto error;
       
    51 +            if (PyList_Append(py_retlist, py_cputime))
       
    52 +                goto error;
       
    53 +            Py_DECREF(py_cputime);
       
    54 +            py_cputime = NULL;
       
    55 +        }
       
    56      }
       
    57 
       
    58      kstat_close(kc);