summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2019-10-24 01:43:56 -0700
committerGiampaolo Rodola <g.rodola@gmail.com>2019-10-24 01:43:56 -0700
commit503dfe9994211523b0b00211a4e3a7d3b96e3201 (patch)
tree45196b293d1a56bfdd6dd3e0115ff06162bffa23
parent75fe258fc515907e0095dbaa51b49c9914385c3a (diff)
parentabdfe0a6de7d4539f0475e977b5da8b05319731f (diff)
downloadpsutil-503dfe9994211523b0b00211a4e3a7d3b96e3201.tar.gz
Merge branch 'master' of github.com:giampaolo/psutil
-rw-r--r--appveyor.yml16
-rw-r--r--docs/index.rst16
-rw-r--r--psutil/_psutil_bsd.c163
-rw-r--r--psutil/_psutil_linux.c128
-rw-r--r--psutil/_psutil_osx.c147
-rw-r--r--psutil/_psutil_posix.c90
-rwxr-xr-xscripts/internal/download_exes.py2
7 files changed, 252 insertions, 310 deletions
diff --git a/appveyor.yml b/appveyor.yml
index 38a6a8e0..f58fa51c 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -15,10 +15,6 @@ environment:
PYTHON_VERSION: "2.7.x"
PYTHON_ARCH: "32"
- - PYTHON: "C:\\Python35"
- PYTHON_VERSION: "3.5.x"
- PYTHON_ARCH: "32"
-
- PYTHON: "C:\\Python36"
PYTHON_VERSION: "3.6.x"
PYTHON_ARCH: "32"
@@ -27,16 +23,16 @@ environment:
PYTHON_VERSION: "3.7.x"
PYTHON_ARCH: "32"
+ - PYTHON: "C:\\Python38"
+ PYTHON_VERSION: "3.8.x"
+ PYTHON_ARCH: "32"
+
# 64 bits
- PYTHON: "C:\\Python27-x64"
PYTHON_VERSION: "2.7.x"
PYTHON_ARCH: "64"
- - PYTHON: "C:\\Python35-x64"
- PYTHON_VERSION: "3.5.x"
- PYTHON_ARCH: "64"
-
- PYTHON: "C:\\Python36-x64"
PYTHON_VERSION: "3.6.x"
PYTHON_ARCH: "64"
@@ -45,6 +41,10 @@ environment:
PYTHON_VERSION: "3.7.x"
PYTHON_ARCH: "64"
+ - PYTHON: "C:\\Python38-x64"
+ PYTHON_VERSION: "3.8.x"
+ PYTHON_ARCH: "64"
+
init:
- "ECHO %PYTHON% %PYTHON_VERSION% %PYTHON_ARCH%"
diff --git a/docs/index.rst b/docs/index.rst
index e5e40737..dd83c6b9 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1299,13 +1299,15 @@ Process class
Here's an example on how to set the highest I/O priority depending on what
platform you're on::
- import psutil
- p = psutil.Process()
- if psutil.LINUX
- p.ionice(psutil.IOPRIO_CLASS_RT, value=7)
- else: # Windows
- p.ionice(psutil.IOPRIO_HIGH)
- p.ionice() # get
+ >>> import psutil
+ >>> p = psutil.Process()
+ >>> if psutil.LINUX:
+ ... p.ionice(psutil.IOPRIO_CLASS_RT, value=7)
+ ... else:
+ ... p.ionice(psutil.IOPRIO_HIGH)
+ ...
+ >>> p.ionice() # get
+ pionice(ioclass=<IOPriority.IOPRIO_CLASS_RT: 1>, value=7)
Availability: Linux, Windows Vista+
diff --git a/psutil/_psutil_bsd.c b/psutil/_psutil_bsd.c
index 74fe5922..b4264ceb 100644
--- a/psutil/_psutil_bsd.c
+++ b/psutil/_psutil_bsd.c
@@ -906,8 +906,7 @@ error:
/*
* define the psutil C module methods and initialize the module.
*/
-static PyMethodDef
-PsutilMethods[] = {
+static PyMethodDef mod_methods[] = {
// --- per-process functions
{"proc_oneshot_info", psutil_proc_oneshot_info, METH_VARARGS,
@@ -994,109 +993,99 @@ PsutilMethods[] = {
{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_bsd_traverse(PyObject *m, visitproc visit, void *arg) {
- Py_VISIT(GETSTATE(m)->error);
- return 0;
-}
-
-static int
-psutil_bsd_clear(PyObject *m) {
- Py_CLEAR(GETSTATE(m)->error);
- return 0;
-}
-
-static struct PyModuleDef
- moduledef = {
- PyModuleDef_HEAD_INIT,
- "psutil_bsd",
- NULL,
- sizeof(struct module_state),
- PsutilMethods,
- NULL,
- psutil_bsd_traverse,
- psutil_bsd_clear,
- NULL
-};
-
-#define INITERROR return NULL
-
-PyMODINIT_FUNC PyInit__psutil_bsd(void)
-
-#else
-#define INITERROR return
-
-void init_psutil_bsd(void)
-#endif
+ #define INITERR return NULL
+
+ static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "_psutil_bsd",
+ NULL,
+ -1,
+ mod_methods,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ };
+
+ PyObject *PyInit__psutil_bsd(void)
+#else /* PY_MAJOR_VERSION */
+ #define INITERR return
+
+ void init_psutil_bsd(void)
+#endif /* PY_MAJOR_VERSION */
{
+ PyObject *v;
#if PY_MAJOR_VERSION >= 3
- PyObject *module = PyModule_Create(&moduledef);
+ PyObject *mod = PyModule_Create(&moduledef);
#else
- PyObject *module = Py_InitModule("_psutil_bsd", PsutilMethods);
+ PyObject *mod = Py_InitModule("_psutil_bsd", mod_methods);
#endif
- PyModule_AddIntConstant(module, "version", PSUTIL_VERSION);
+ if (mod == NULL)
+ INITERR;
+
+ if (PyModule_AddIntConstant(mod, "version", PSUTIL_VERSION)) INITERR;
// process status constants
#ifdef PSUTIL_FREEBSD
- PyModule_AddIntConstant(module, "SIDL", SIDL);
- PyModule_AddIntConstant(module, "SRUN", SRUN);
- PyModule_AddIntConstant(module, "SSLEEP", SSLEEP);
- PyModule_AddIntConstant(module, "SSTOP", SSTOP);
- PyModule_AddIntConstant(module, "SZOMB", SZOMB);
- PyModule_AddIntConstant(module, "SWAIT", SWAIT);
- PyModule_AddIntConstant(module, "SLOCK", SLOCK);
+ if (PyModule_AddIntConstant(mod, "SIDL", SIDL)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SRUN", SRUN)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SSLEEP", SSLEEP)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SSTOP", SSTOP)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SZOMB", SZOMB)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SWAIT", SWAIT)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SLOCK", SLOCK)) INITERR;
#elif PSUTIL_OPENBSD
- PyModule_AddIntConstant(module, "SIDL", SIDL);
- PyModule_AddIntConstant(module, "SRUN", SRUN);
- PyModule_AddIntConstant(module, "SSLEEP", SSLEEP);
- PyModule_AddIntConstant(module, "SSTOP", SSTOP);
- PyModule_AddIntConstant(module, "SZOMB", SZOMB); // unused
- PyModule_AddIntConstant(module, "SDEAD", SDEAD);
- PyModule_AddIntConstant(module, "SONPROC", SONPROC);
+ if (PyModule_AddIntConstant(mod, "SIDL", SIDL)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SRUN", SRUN)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SSLEEP", SSLEEP)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SSTOP", SSTOP)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SZOMB", SZOMB); INITERR; // unused
+ if (PyModule_AddIntConstant(mod, "SDEAD", SDEAD)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SONPROC", SONPROC)) INITERR;
#elif defined(PSUTIL_NETBSD)
- PyModule_AddIntConstant(module, "SIDL", LSIDL);
- PyModule_AddIntConstant(module, "SRUN", LSRUN);
- PyModule_AddIntConstant(module, "SSLEEP", LSSLEEP);
- PyModule_AddIntConstant(module, "SSTOP", LSSTOP);
- PyModule_AddIntConstant(module, "SZOMB", LSZOMB);
- PyModule_AddIntConstant(module, "SDEAD", LSDEAD);
- PyModule_AddIntConstant(module, "SONPROC", LSONPROC);
+ if (PyModule_AddIntConstant(mod, "SIDL", LSIDL)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SRUN", LSRUN)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SSLEEP", LSSLEEP)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SSTOP", LSSTOP)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SZOMB", LSZOMB)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SDEAD", LSDEAD)) INITERR;
+ if (PyModule_AddIntConstant(mod, "SONPROC", LSONPROC)) INITERR;
// unique to NetBSD
- PyModule_AddIntConstant(module, "SSUSPENDED", LSSUSPENDED);
+ if (PyModule_AddIntConstant(mod, "SSUSPENDED", LSSUSPENDED)) INITERR;
#endif
// connection status constants
- PyModule_AddIntConstant(module, "TCPS_CLOSED", TCPS_CLOSED);
- PyModule_AddIntConstant(module, "TCPS_CLOSING", TCPS_CLOSING);
- PyModule_AddIntConstant(module, "TCPS_CLOSE_WAIT", TCPS_CLOSE_WAIT);
- PyModule_AddIntConstant(module, "TCPS_LISTEN", TCPS_LISTEN);
- PyModule_AddIntConstant(module, "TCPS_ESTABLISHED", TCPS_ESTABLISHED);
- PyModule_AddIntConstant(module, "TCPS_SYN_SENT", TCPS_SYN_SENT);
- PyModule_AddIntConstant(module, "TCPS_SYN_RECEIVED", TCPS_SYN_RECEIVED);
- PyModule_AddIntConstant(module, "TCPS_FIN_WAIT_1", TCPS_FIN_WAIT_1);
- PyModule_AddIntConstant(module, "TCPS_FIN_WAIT_2", TCPS_FIN_WAIT_2);
- PyModule_AddIntConstant(module, "TCPS_LAST_ACK", TCPS_LAST_ACK);
- PyModule_AddIntConstant(module, "TCPS_TIME_WAIT", TCPS_TIME_WAIT);
+ if (PyModule_AddIntConstant(mod, "TCPS_CLOSED", TCPS_CLOSED))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_CLOSING", TCPS_CLOSING))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_CLOSE_WAIT", TCPS_CLOSE_WAIT))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_LISTEN", TCPS_LISTEN))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_ESTABLISHED", TCPS_ESTABLISHED))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_SYN_SENT", TCPS_SYN_SENT))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_SYN_RECEIVED", TCPS_SYN_RECEIVED))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_FIN_WAIT_1", TCPS_FIN_WAIT_1))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_FIN_WAIT_2", TCPS_FIN_WAIT_2))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_LAST_ACK", TCPS_LAST_ACK))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_TIME_WAIT", TCPS_TIME_WAIT))
+ INITERR;
// PSUTIL_CONN_NONE
- PyModule_AddIntConstant(module, "PSUTIL_CONN_NONE", 128);
+ if (PyModule_AddIntConstant(mod, "PSUTIL_CONN_NONE", 128)) INITERR;
psutil_setup();
- if (module == NULL)
- INITERROR;
+ if (mod == NULL)
+ INITERR;
#if PY_MAJOR_VERSION >= 3
- return module;
+ return mod;
#endif
}
diff --git a/psutil/_psutil_linux.c b/psutil/_psutil_linux.c
index 8151b75d..717723d0 100644
--- a/psutil/_psutil_linux.c
+++ b/psutil/_psutil_linux.c
@@ -537,10 +537,10 @@ error:
/*
- * Define the psutil C module methods and initialize the module.
+ * Module init.
*/
-static PyMethodDef
-PsutilMethods[] = {
+
+static PyMethodDef mod_methods[] = {
// --- per-process functions
#ifdef PSUTIL_HAVE_IOPRIO
@@ -574,7 +574,6 @@ PsutilMethods[] = {
{"linux_prlimit", psutil_linux_prlimit, METH_VARARGS,
"Get or set process resource limits."},
#endif
-
// --- others
{"set_testing", psutil_set_testing, METH_NOARGS,
"Set psutil in testing mode"},
@@ -582,75 +581,51 @@ PsutilMethods[] = {
{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_linux_traverse(PyObject *m, visitproc visit, void *arg) {
- Py_VISIT(GETSTATE(m)->error);
- return 0;
-}
-
-static int
-psutil_linux_clear(PyObject *m) {
- Py_CLEAR(GETSTATE(m)->error);
- return 0;
-}
-
-static struct PyModuleDef
- moduledef = {
- PyModuleDef_HEAD_INIT,
- "psutil_linux",
- NULL,
- sizeof(struct module_state),
- PsutilMethods,
- NULL,
- psutil_linux_traverse,
- psutil_linux_clear,
- NULL
-};
-
-#define INITERROR return NULL
-
-PyMODINIT_FUNC PyInit__psutil_linux(void)
-
-#else
-#define INITERROR return
-
-void init_psutil_linux(void)
-#endif
+ #define INITERR return NULL
+
+ static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "_psutil_linux",
+ NULL,
+ -1,
+ mod_methods,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ };
+
+ PyObject *PyInit__psutil_linux(void)
+#else /* PY_MAJOR_VERSION */
+ #define INITERR return
+
+ void init_psutil_linux(void)
+#endif /* PY_MAJOR_VERSION */
{
PyObject *v;
#if PY_MAJOR_VERSION >= 3
- PyObject *module = PyModule_Create(&moduledef);
+ PyObject *mod = PyModule_Create(&moduledef);
#else
- PyObject *module = Py_InitModule("_psutil_linux", PsutilMethods);
+ PyObject *mod = Py_InitModule("_psutil_linux", mod_methods);
#endif
- if (module == NULL)
- INITERROR;
+ if (mod == NULL)
+ INITERR;
- PyModule_AddIntConstant(module, "version", PSUTIL_VERSION);
+ if (PyModule_AddIntConstant(mod, "version", PSUTIL_VERSION)) INITERR;
#if PSUTIL_HAVE_PRLIMIT
- PyModule_AddIntConstant(module, "RLIMIT_AS", RLIMIT_AS);
- PyModule_AddIntConstant(module, "RLIMIT_CORE", RLIMIT_CORE);
- PyModule_AddIntConstant(module, "RLIMIT_CPU", RLIMIT_CPU);
- PyModule_AddIntConstant(module, "RLIMIT_DATA", RLIMIT_DATA);
- PyModule_AddIntConstant(module, "RLIMIT_FSIZE", RLIMIT_FSIZE);
- PyModule_AddIntConstant(module, "RLIMIT_LOCKS", RLIMIT_LOCKS);
- PyModule_AddIntConstant(module, "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK);
- PyModule_AddIntConstant(module, "RLIMIT_NOFILE", RLIMIT_NOFILE);
- PyModule_AddIntConstant(module, "RLIMIT_NPROC", RLIMIT_NPROC);
- PyModule_AddIntConstant(module, "RLIMIT_RSS", RLIMIT_RSS);
- PyModule_AddIntConstant(module, "RLIMIT_STACK", RLIMIT_STACK);
+ if (PyModule_AddIntConstant(mod, "RLIMIT_AS", RLIMIT_AS)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_CORE", RLIMIT_CORE)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_CPU", RLIMIT_CPU)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_DATA", RLIMIT_DATA)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_FSIZE", RLIMIT_FSIZE)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_LOCKS", RLIMIT_LOCKS)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_NOFILE", RLIMIT_NOFILE)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_NPROC", RLIMIT_NPROC)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_RSS", RLIMIT_RSS)) INITERR;
+ if (PyModule_AddIntConstant(mod, "RLIMIT_STACK", RLIMIT_STACK)) INITERR;
#if defined(HAVE_LONG_LONG)
if (sizeof(RLIM_INFINITY) > sizeof(long)) {
@@ -661,32 +636,33 @@ void init_psutil_linux(void)
v = PyLong_FromLong((long) RLIM_INFINITY);
}
if (v) {
- PyModule_AddObject(module, "RLIM_INFINITY", v);
+ PyModule_AddObject(mod, "RLIM_INFINITY", v);
}
#ifdef RLIMIT_MSGQUEUE
- PyModule_AddIntConstant(module, "RLIMIT_MSGQUEUE", RLIMIT_MSGQUEUE);
+ if (PyModule_AddIntConstant(mod, "RLIMIT_MSGQUEUE", RLIMIT_MSGQUEUE)) INITERR;
#endif
#ifdef RLIMIT_NICE
- PyModule_AddIntConstant(module, "RLIMIT_NICE", RLIMIT_NICE);
+ if (PyModule_AddIntConstant(mod, "RLIMIT_NICE", RLIMIT_NICE)) INITERR;
#endif
#ifdef RLIMIT_RTPRIO
- PyModule_AddIntConstant(module, "RLIMIT_RTPRIO", RLIMIT_RTPRIO);
+ if (PyModule_AddIntConstant(mod, "RLIMIT_RTPRIO", RLIMIT_RTPRIO)) INITERR;
#endif
#ifdef RLIMIT_RTTIME
- PyModule_AddIntConstant(module, "RLIMIT_RTTIME", RLIMIT_RTTIME);
+ if (PyModule_AddIntConstant(mod, "RLIMIT_RTTIME", RLIMIT_RTTIME)) INITERR;
#endif
#ifdef RLIMIT_SIGPENDING
- PyModule_AddIntConstant(module, "RLIMIT_SIGPENDING", RLIMIT_SIGPENDING);
+ if (PyModule_AddIntConstant(mod, "RLIMIT_SIGPENDING", RLIMIT_SIGPENDING))
+ INITERR;
#endif
#endif
- PyModule_AddIntConstant(module, "DUPLEX_HALF", DUPLEX_HALF);
- PyModule_AddIntConstant(module, "DUPLEX_FULL", DUPLEX_FULL);
- PyModule_AddIntConstant(module, "DUPLEX_UNKNOWN", DUPLEX_UNKNOWN);
+ if (PyModule_AddIntConstant(mod, "DUPLEX_HALF", DUPLEX_HALF)) INITERR;
+ if (PyModule_AddIntConstant(mod, "DUPLEX_FULL", DUPLEX_FULL)) INITERR;
+ if (PyModule_AddIntConstant(mod, "DUPLEX_UNKNOWN", DUPLEX_UNKNOWN)) INITERR;
- if (module == NULL)
- INITERROR;
+ if (mod == NULL)
+ INITERR;
#if PY_MAJOR_VERSION >= 3
- return module;
+ return mod;
#endif
}
diff --git a/psutil/_psutil_osx.c b/psutil/_psutil_osx.c
index eaf4e514..d2ca94b5 100644
--- a/psutil/_psutil_osx.c
+++ b/psutil/_psutil_osx.c
@@ -1745,8 +1745,7 @@ error:
/*
* define the psutil C module methods and initialize the module.
*/
-static PyMethodDef
-PsutilMethods[] = {
+static PyMethodDef mod_methods[] = {
// --- per-process functions
{"proc_kinfo_oneshot", psutil_proc_kinfo_oneshot, METH_VARARGS,
@@ -1816,96 +1815,94 @@ PsutilMethods[] = {
};
-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_osx_traverse(PyObject *m, visitproc visit, void *arg) {
- Py_VISIT(GETSTATE(m)->error);
- return 0;
-}
-
-static int
-psutil_osx_clear(PyObject *m) {
- Py_CLEAR(GETSTATE(m)->error);
- return 0;
-}
-
-
-static struct PyModuleDef moduledef = {
- PyModuleDef_HEAD_INIT,
- "psutil_osx",
- NULL,
- sizeof(struct module_state),
- PsutilMethods,
- NULL,
- psutil_osx_traverse,
- psutil_osx_clear,
- NULL
-};
-
-#define INITERROR return NULL
-
-PyMODINIT_FUNC PyInit__psutil_osx(void)
-
-#else
-#define INITERROR return
-
-void
-init_psutil_osx(void)
-#endif
+ #define INITERR return NULL
+
+ static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "_psutil_osx",
+ NULL,
+ -1,
+ mod_methods,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ };
+
+ PyObject *PyInit__psutil_osx(void)
+#else /* PY_MAJOR_VERSION */
+ #define INITERR return
+
+ void init_psutil_osx(void)
+#endif /* PY_MAJOR_VERSION */
{
+ PyObject *v;
#if PY_MAJOR_VERSION >= 3
- PyObject *module = PyModule_Create(&moduledef);
+ PyObject *mod = PyModule_Create(&moduledef);
#else
- PyObject *module = Py_InitModule("_psutil_osx", PsutilMethods);
+ PyObject *mod = Py_InitModule("_psutil_osx", mod_methods);
#endif
- if (module == NULL)
- INITERROR;
+ if (mod == NULL)
+ INITERR;
if (psutil_setup() != 0)
- INITERROR;
+ INITERR;
- PyModule_AddIntConstant(module, "version", PSUTIL_VERSION);
+ if (PyModule_AddIntConstant(mod, "version", PSUTIL_VERSION))
+ INITERR;
// process status constants, defined in:
// http://fxr.watson.org/fxr/source/bsd/sys/proc.h?v=xnu-792.6.70#L149
- PyModule_AddIntConstant(module, "SIDL", SIDL);
- PyModule_AddIntConstant(module, "SRUN", SRUN);
- PyModule_AddIntConstant(module, "SSLEEP", SSLEEP);
- PyModule_AddIntConstant(module, "SSTOP", SSTOP);
- PyModule_AddIntConstant(module, "SZOMB", SZOMB);
+ if (PyModule_AddIntConstant(mod, "SIDL", SIDL))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "SRUN", SRUN))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "SSLEEP", SSLEEP))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "SSTOP", SSTOP))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "SZOMB", SZOMB))
+ INITERR;
// connection status constants
- PyModule_AddIntConstant(module, "TCPS_CLOSED", TCPS_CLOSED);
- PyModule_AddIntConstant(module, "TCPS_CLOSING", TCPS_CLOSING);
- PyModule_AddIntConstant(module, "TCPS_CLOSE_WAIT", TCPS_CLOSE_WAIT);
- PyModule_AddIntConstant(module, "TCPS_LISTEN", TCPS_LISTEN);
- PyModule_AddIntConstant(module, "TCPS_ESTABLISHED", TCPS_ESTABLISHED);
- PyModule_AddIntConstant(module, "TCPS_SYN_SENT", TCPS_SYN_SENT);
- PyModule_AddIntConstant(module, "TCPS_SYN_RECEIVED", TCPS_SYN_RECEIVED);
- PyModule_AddIntConstant(module, "TCPS_FIN_WAIT_1", TCPS_FIN_WAIT_1);
- PyModule_AddIntConstant(module, "TCPS_FIN_WAIT_2", TCPS_FIN_WAIT_2);
- PyModule_AddIntConstant(module, "TCPS_LAST_ACK", TCPS_LAST_ACK);
- PyModule_AddIntConstant(module, "TCPS_TIME_WAIT", TCPS_TIME_WAIT);
- PyModule_AddIntConstant(module, "PSUTIL_CONN_NONE", PSUTIL_CONN_NONE);
+ if (PyModule_AddIntConstant(mod, "TCPS_CLOSED", TCPS_CLOSED))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_CLOSING", TCPS_CLOSING))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_CLOSE_WAIT", TCPS_CLOSE_WAIT))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_LISTEN", TCPS_LISTEN))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_ESTABLISHED", TCPS_ESTABLISHED))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_SYN_SENT", TCPS_SYN_SENT))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_SYN_RECEIVED", TCPS_SYN_RECEIVED))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_FIN_WAIT_1", TCPS_FIN_WAIT_1))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_FIN_WAIT_2", TCPS_FIN_WAIT_2))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_LAST_ACK", TCPS_LAST_ACK))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "TCPS_TIME_WAIT", TCPS_TIME_WAIT))
+ INITERR;
+ if (PyModule_AddIntConstant(mod, "PSUTIL_CONN_NONE", PSUTIL_CONN_NONE))
+ INITERR;
// Exception.
ZombieProcessError = PyErr_NewException(
"_psutil_osx.ZombieProcessError", NULL, NULL);
+ if (ZombieProcessError == NULL)
+ INITERR;
Py_INCREF(ZombieProcessError);
- PyModule_AddObject(module, "ZombieProcessError", ZombieProcessError);
+ if (PyModule_AddObject(mod, "ZombieProcessError", ZombieProcessError)) {
+ Py_DECREF(ZombieProcessError);
+ INITERR;
+ }
- if (module == NULL)
- INITERROR;
+ if (mod == NULL)
+ INITERR;
#if PY_MAJOR_VERSION >= 3
- return module;
+ return mod;
#endif
}
diff --git a/psutil/_psutil_posix.c b/psutil/_psutil_posix.c
index 5d20b21e..209e787d 100644
--- a/psutil/_psutil_posix.c
+++ b/psutil/_psutil_posix.c
@@ -618,11 +618,15 @@ psutil_net_if_duplex_speed(PyObject *self, PyObject *args) {
#endif // net_if_stats() macOS/BSD implementation
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
/*
* define the psutil C module methods and initialize the module.
*/
-static PyMethodDef
-PsutilMethods[] = {
+static PyMethodDef mod_methods[] = {
{"getpriority", psutil_posix_getpriority, METH_VARARGS,
"Return process priority"},
{"setpriority", psutil_posix_setpriority, METH_VARARGS,
@@ -640,71 +644,45 @@ PsutilMethods[] = {
{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
-
-#ifdef __cplusplus
-extern "C" {
-#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
-
-PyMODINIT_FUNC PyInit__psutil_posix(void)
-
-#else
-#define INITERROR return
-
-void init_psutil_posix(void)
-#endif
+ #define INITERR return NULL
+
+ static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "_psutil_posix",
+ NULL,
+ -1,
+ mod_methods,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ };
+
+ PyObject *PyInit__psutil_posix(void)
+#else /* PY_MAJOR_VERSION */
+ #define INITERR return
+
+ void init_psutil_posix(void)
+#endif /* PY_MAJOR_VERSION */
{
#if PY_MAJOR_VERSION >= 3
- PyObject *module = PyModule_Create(&moduledef);
+ PyObject *mod = PyModule_Create(&moduledef);
#else
- PyObject *module = Py_InitModule("_psutil_posix", PsutilMethods);
+ PyObject *mod = Py_InitModule("_psutil_posix", mod_methods);
#endif
+ if (mod == NULL)
+ INITERR;
#if defined(PSUTIL_BSD) || defined(PSUTIL_OSX) || defined(PSUTIL_SUNOS) || defined(PSUTIL_AIX)
- PyModule_AddIntConstant(module, "AF_LINK", AF_LINK);
+ if (PyModule_AddIntConstant(mod, "AF_LINK", AF_LINK)) INITERR;
#endif
- if (module == NULL)
- INITERROR;
+ if (mod == NULL)
+ INITERR;
#if PY_MAJOR_VERSION >= 3
- return module;
+ return mod;
#endif
}
diff --git a/scripts/internal/download_exes.py b/scripts/internal/download_exes.py
index 1b72a177..3f0be8ea 100755
--- a/scripts/internal/download_exes.py
+++ b/scripts/internal/download_exes.py
@@ -26,7 +26,7 @@ from scriptutils import printerr, exit
BASE_URL = 'https://ci.appveyor.com/api'
-PY_VERSIONS = ['2.7', '3.5', '3.6', '3.7']
+PY_VERSIONS = ['2.7', '3.6', '3.7', '3.8']
TIMEOUT = 30
COLORS = True