summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2017-11-12 13:19:28 +0100
committerGiampaolo Rodola <g.rodola@gmail.com>2017-11-12 13:19:28 +0100
commit77e77e6115799648c01f67ef033a4e778c542732 (patch)
tree8e70e869896e17710adb63fb57896763971a63b8
parenta9d1ad4b64d00fcd82fd22e257227b3cbdb8c926 (diff)
downloadpsutil-77e77e6115799648c01f67ef033a4e778c542732.tar.gz
provide DEBUG info in psutil_raise_for_pid()
-rw-r--r--psutil/_psutil_bsd.c2
-rw-r--r--psutil/_psutil_osx.c13
-rw-r--r--psutil/_psutil_posix.c15
-rw-r--r--psutil/arch/freebsd/proc_socks.c2
-rw-r--r--psutil/arch/freebsd/specific.c6
-rw-r--r--psutil/arch/netbsd/specific.c2
-rw-r--r--psutil/arch/openbsd/specific.c4
-rw-r--r--psutil/arch/osx/process_info.c2
8 files changed, 27 insertions, 19 deletions
diff --git a/psutil/_psutil_bsd.c b/psutil/_psutil_bsd.c
index f1adb1d3..9a2ed04b 100644
--- a/psutil/_psutil_bsd.c
+++ b/psutil/_psutil_bsd.c
@@ -475,7 +475,7 @@ psutil_proc_open_files(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getfile(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getfile() failed");
+ psutil_raise_for_pid(pid, "kinfo_getfile()");
goto error;
}
diff --git a/psutil/_psutil_osx.c b/psutil/_psutil_osx.c
index 4ff301d4..bb98c1cc 100644
--- a/psutil/_psutil_osx.c
+++ b/psutil/_psutil_osx.c
@@ -266,7 +266,7 @@ psutil_proc_exe(PyObject *self, PyObject *args) {
if (pid == 0)
AccessDenied();
else
- psutil_raise_for_pid(pid, "proc_pidpath() syscall failed");
+ psutil_raise_for_pid(pid, "proc_pidpath()");
return NULL;
}
return PyUnicode_DecodeFSDefault(buf);
@@ -336,7 +336,7 @@ psutil_proc_memory_maps(PyObject *self, PyObject *args) {
err = task_for_pid(mach_task_self(), (pid_t)pid, &task);
if (err != KERN_SUCCESS) {
- psutil_raise_for_pid(pid, "task_for_pid() failed");
+ psutil_raise_for_pid(pid, "task_for_pid()");
goto error;
}
@@ -376,8 +376,7 @@ psutil_proc_memory_maps(PyObject *self, PyObject *args) {
errno = 0;
proc_regionfilename((pid_t)pid, address, buf, sizeof(buf));
if ((errno != 0) || ((sizeof(buf)) <= 0)) {
- psutil_raise_for_pid(
- pid, "proc_regionfilename() syscall failed");
+ psutil_raise_for_pid(pid, "proc_regionfilename()");
goto error;
}
@@ -1147,7 +1146,8 @@ psutil_proc_open_files(PyObject *self, PyObject *args) {
continue;
}
else {
- psutil_raise_for_pid(pid, "proc_pidinfo() syscall failed");
+ psutil_raise_for_pid(
+ pid, "proc_pidinfo(PROC_PIDFDVNODEPATHINFO)");
goto error;
}
}
@@ -1259,7 +1259,8 @@ psutil_proc_connections(PyObject *self, PyObject *args) {
continue;
}
else {
- psutil_raise_for_pid(pid, "proc_pidinfo() syscall failed");
+ psutil_raise_for_pid(
+ pid, "proc_pidinfo(PROC_PIDFDSOCKETINFO)");
goto error;
}
}
diff --git a/psutil/_psutil_posix.c b/psutil/_psutil_posix.c
index ea0fba53..8ccd8a91 100644
--- a/psutil/_psutil_posix.c
+++ b/psutil/_psutil_posix.c
@@ -112,16 +112,23 @@ psutil_pid_exists(long pid) {
* This will always set a Python exception and return NULL.
*/
int
-psutil_raise_for_pid(long pid, char *msg) {
+psutil_raise_for_pid(long pid, char *syscall_name) {
// Set exception to AccessDenied if pid exists else NoSuchProcess.
if (errno != 0) {
+ // Unlikely we get here.
+ psutil_debug("%s syscall failed and set errno to %i; raising "
+ "OSError(errno)", syscall_name, errno);
PyErr_SetFromErrno(PyExc_OSError);
return 0;
}
- if (psutil_pid_exists(pid) == 0)
+ else if (psutil_pid_exists(pid) == 0) {
+ psutil_debug("%s syscall failed and PID %i no longer exists; "
+ "assume NoSuchProcess", syscall_name, pid);
NoSuchProcess();
- else
- PyErr_SetString(PyExc_RuntimeError, msg);
+ }
+ else {
+ PyErr_Format(PyExc_RuntimeError, "%s syscall failed", syscall_name);
+ }
return 0;
}
diff --git a/psutil/arch/freebsd/proc_socks.c b/psutil/arch/freebsd/proc_socks.c
index c5b19a0d..a458a01e 100644
--- a/psutil/arch/freebsd/proc_socks.c
+++ b/psutil/arch/freebsd/proc_socks.c
@@ -212,7 +212,7 @@ psutil_proc_connections(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getfile(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getfile() failed");
+ psutil_raise_for_pid(pid, "kinfo_getfile()");
goto error;
}
diff --git a/psutil/arch/freebsd/specific.c b/psutil/arch/freebsd/specific.c
index 8d09ad89..ff128e65 100644
--- a/psutil/arch/freebsd/specific.c
+++ b/psutil/arch/freebsd/specific.c
@@ -548,7 +548,7 @@ psutil_proc_cwd(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getfile(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getfile() failed");
+ psutil_raise_for_pid(pid, "kinfo_getfile()");
goto error;
}
@@ -597,7 +597,7 @@ psutil_proc_num_fds(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getfile(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getfile() failed");
+ psutil_raise_for_pid(pid, "kinfo_getfile()");
return NULL;
}
free(freep);
@@ -765,7 +765,7 @@ psutil_proc_memory_maps(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getvmmap(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getvmmap() failed");
+ psutil_raise_for_pid(pid, "kinfo_getvmmap()");
goto error;
}
for (i = 0; i < cnt; i++) {
diff --git a/psutil/arch/netbsd/specific.c b/psutil/arch/netbsd/specific.c
index 1dc2080e..0a32139d 100644
--- a/psutil/arch/netbsd/specific.c
+++ b/psutil/arch/netbsd/specific.c
@@ -502,7 +502,7 @@ psutil_proc_num_fds(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getfile(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getfile() failed");
+ psutil_raise_for_pid(pid, "kinfo_getfile()");
return NULL;
}
free(freep);
diff --git a/psutil/arch/openbsd/specific.c b/psutil/arch/openbsd/specific.c
index de30c4d7..2a0d30ce 100644
--- a/psutil/arch/openbsd/specific.c
+++ b/psutil/arch/openbsd/specific.c
@@ -404,7 +404,7 @@ psutil_proc_num_fds(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getfile(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getfile() failed");
+ psutil_raise_for_pid(pid, "kinfo_getfile()");
return NULL;
}
free(freep);
@@ -509,7 +509,7 @@ psutil_proc_connections(PyObject *self, PyObject *args) {
errno = 0;
freep = kinfo_getfile(pid, &cnt);
if (freep == NULL) {
- psutil_raise_for_pid(pid, "kinfo_getfile() failed");
+ psutil_raise_for_pid(pid, "kinfo_getfile()");
goto error;
}
diff --git a/psutil/arch/osx/process_info.c b/psutil/arch/osx/process_info.c
index 7c715be8..f0a01132 100644
--- a/psutil/arch/osx/process_info.c
+++ b/psutil/arch/osx/process_info.c
@@ -354,7 +354,7 @@ psutil_proc_pidinfo(long pid, int flavor, uint64_t arg, void *pti, int size) {
errno = 0;
int ret = proc_pidinfo((int)pid, flavor, arg, pti, size);
if ((ret <= 0) || ((unsigned long)ret < sizeof(pti))) {
- psutil_raise_for_pid(pid, "proc_pidinfo() syscall failed");
+ psutil_raise_for_pid(pid, "proc_pidinfo()");
return 0;
}
return ret;