| Index: third_party/psutil/psutil/_psutil_posix.c
|
| diff --git a/third_party/psutil/psutil/_psutil_posix.c b/third_party/psutil/psutil/_psutil_posix.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6a530f053e6a615285f2156f6ef5ff5f2ace9c19
|
| --- /dev/null
|
| +++ b/third_party/psutil/psutil/_psutil_posix.c
|
| @@ -0,0 +1,134 @@
|
| +/*
|
| + * $Id: _psutil_posix.c 1142 2011-10-05 18:45:49Z g.rodola $
|
| + *
|
| + * Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved.
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + *
|
| + * Functions specific to all POSIX compliant platforms.
|
| + */
|
| +
|
| +#include <Python.h>
|
| +#include <errno.h>
|
| +#include <stdlib.h>
|
| +#include <sys/resource.h>
|
| +
|
| +#include "_psutil_posix.h"
|
| +
|
| +
|
| +/*
|
| + * Given a PID return process priority as a Python integer.
|
| + */
|
| +static PyObject*
|
| +posix_getpriority(PyObject* self, PyObject* args)
|
| +{
|
| + long pid;
|
| + int priority;
|
| + errno = 0;
|
| + if (! PyArg_ParseTuple(args, "l", &pid)) {
|
| + return NULL;
|
| + }
|
| + priority = getpriority(PRIO_PROCESS, pid);
|
| + if (errno != 0) {
|
| + return PyErr_SetFromErrno(PyExc_OSError);
|
| + }
|
| + return Py_BuildValue("i", priority);
|
| +}
|
| +
|
| +/*
|
| + * Given a PID and a value change process priority.
|
| + */
|
| +static PyObject*
|
| +posix_setpriority(PyObject* self, PyObject* args)
|
| +{
|
| + long pid;
|
| + int priority;
|
| + int retval;
|
| + if (! PyArg_ParseTuple(args, "li", &pid, &priority)) {
|
| + return NULL;
|
| + }
|
| + retval = setpriority(PRIO_PROCESS, pid, priority);
|
| + if (retval == -1) {
|
| + return PyErr_SetFromErrno(PyExc_OSError);
|
| + }
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +}
|
| +
|
| +
|
| +/*
|
| + * define the psutil C module methods and initialize the module.
|
| + */
|
| +static PyMethodDef
|
| +PsutilMethods[] =
|
| +{
|
| + {"getpriority", posix_getpriority, METH_VARARGS,
|
| + "Return process priority"},
|
| + {"setpriority", posix_setpriority, METH_VARARGS,
|
| + "Set process priority"},
|
| + {NULL, NULL, 0, NULL}
|
| +};
|
| +
|
| +struct module_state {
|
| + PyObject *error;
|
| +};
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| +#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
|
| +#else
|
| +#define GETSTATE(m) (&_state)
|
| +#endif
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| +
|
| +static int
|
| +psutil_posix_traverse(PyObject *m, visitproc visit, void *arg) {
|
| + Py_VISIT(GETSTATE(m)->error);
|
| + return 0;
|
| +}
|
| +
|
| +static int
|
| +psutil_posix_clear(PyObject *m) {
|
| + Py_CLEAR(GETSTATE(m)->error);
|
| + return 0;
|
| +}
|
| +
|
| +static struct PyModuleDef
|
| +moduledef = {
|
| + PyModuleDef_HEAD_INIT,
|
| + "psutil_posix",
|
| + NULL,
|
| + sizeof(struct module_state),
|
| + PsutilMethods,
|
| + NULL,
|
| + psutil_posix_traverse,
|
| + psutil_posix_clear,
|
| + NULL
|
| +};
|
| +
|
| +#define INITERROR return NULL
|
| +
|
| +PyObject *
|
| +PyInit__psutil_posix(void)
|
| +
|
| +#else
|
| +#define INITERROR return
|
| +
|
| +void init_psutil_posix(void)
|
| +#endif
|
| +{
|
| +#if PY_MAJOR_VERSION >= 3
|
| + PyObject *module = PyModule_Create(&moduledef);
|
| +#else
|
| + PyObject *module = Py_InitModule("_psutil_posix", PsutilMethods);
|
| +#endif
|
| + if (module == NULL) {
|
| + INITERROR;
|
| + }
|
| +#if PY_MAJOR_VERSION >= 3
|
| + return module;
|
| +#endif
|
| +}
|
| +
|
| +
|
| +
|
|
|