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 |
+} |
+ |
+ |
+ |