summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2017-11-24 15:05:33 +0100
committerGiampaolo Rodola <g.rodola@gmail.com>2017-11-24 15:05:33 +0100
commitd43ee3003350df56c6d1a96dac9784f064daad46 (patch)
tree65ab533d75dd634440477f58dc5d8a504db37854
parent04e867218f565bbf3fd37eb14dd68699092e99b0 (diff)
downloadpsutil-d43ee3003350df56c6d1a96dac9784f064daad46.tar.gz
fix #1181: raise AD if task_for_pid() fails with 5 and errno == ENOENT
-rw-r--r--HISTORY.rst1
-rw-r--r--psutil/_psutil_osx.c12
2 files changed, 11 insertions, 2 deletions
diff --git a/HISTORY.rst b/HISTORY.rst
index fb3311bb..430fb5e4 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -17,6 +17,7 @@
- 1169_: [Linux] users() "hostname" returns username instead. (patch by
janderbrain)
- 1172_: [Windows] `make test` does not work.
+- 1181_: [OSX] Process.memory_maps() may raise ENOENT.
5.4.1
=====
diff --git a/psutil/_psutil_osx.c b/psutil/_psutil_osx.c
index fef61ca8..55dd64ca 100644
--- a/psutil/_psutil_osx.c
+++ b/psutil/_psutil_osx.c
@@ -338,8 +338,16 @@ psutil_proc_memory_maps(PyObject *self, PyObject *args) {
err = task_for_pid(mach_task_self(), (pid_t)pid, &task);
if (err != KERN_SUCCESS) {
- psutil_debug("task_for_pid() failed"); // TODO temporary
- psutil_raise_for_pid(pid, "task_for_pid()");
+ if ((err == 5) && (errno == ENOENT)) {
+ // See: https://github.com/giampaolo/psutil/issues/1181
+ psutil_debug("task_for_pid(MACH_PORT_NULL) failed; err=%i, "
+ "errno=%i, msg='%s'\n", err, errno,
+ mach_error_string(err));
+ AccessDenied("");
+ }
+ else {
+ psutil_raise_for_pid(pid, "task_for_pid(MACH_PORT_NULL)");
+ }
goto error;
}