summaryrefslogtreecommitdiff
path: root/psutil
diff options
context:
space:
mode:
Diffstat (limited to 'psutil')
-rw-r--r--psutil/_pslinux.py10
-rw-r--r--psutil/_psutil_osx.c13
-rw-r--r--psutil/tests/__init__.py1
-rw-r--r--psutil/tests/test_linux.py18
-rw-r--r--psutil/tests/test_process.py6
5 files changed, 30 insertions, 18 deletions
diff --git a/psutil/_pslinux.py b/psutil/_pslinux.py
index 50da9b53..0b996e70 100644
--- a/psutil/_pslinux.py
+++ b/psutil/_pslinux.py
@@ -180,13 +180,13 @@ def readlink(path):
def file_flags_to_mode(flags):
- md = {os.O_RDONLY: 'r', os.O_WRONLY: 'w', os.O_RDWR: 'w+'}
- m = md[flags & (os.O_RDONLY | os.O_WRONLY | os.O_RDWR)]
+ modes_map = {os.O_RDONLY: 'r', os.O_WRONLY: 'w', os.O_RDWR: 'w+'}
+ mode = modes_map[flags & (os.O_RDONLY | os.O_WRONLY | os.O_RDWR)]
if flags & os.O_APPEND:
- m = m.replace('w', 'a', 1)
- m = m.replace('w+', 'r+')
+ mode = mode.replace('w', 'a', 1)
+ mode = mode.replace('w+', 'r+')
# possible values: r, w, a, r+, a+
- return m
+ return mode
def get_sector_size():
diff --git a/psutil/_psutil_osx.c b/psutil/_psutil_osx.c
index f76ca0e6..e9a898ac 100644
--- a/psutil/_psutil_osx.c
+++ b/psutil/_psutil_osx.c
@@ -581,11 +581,14 @@ psutil_proc_memory_uss(PyObject *self, PyObject *args) {
mach_msg_type_number_t info_count = VM_REGION_TOP_INFO_COUNT;
kern_return_t kr;
vm_size_t page_size;
+ mach_vm_address_t addr = MACH_VM_MIN_ADDRESS;
+ mach_port_t task = MACH_PORT_NULL;
+ vm_region_top_info_data_t info;
+ mach_port_t object_name;
if (! PyArg_ParseTuple(args, "l", &pid))
return NULL;
- mach_port_t task = MACH_PORT_NULL;
err = task_for_pid(mach_task_self(), pid, &task);
if (err != KERN_SUCCESS) {
psutil_raise_ad_or_nsp(pid);
@@ -600,10 +603,7 @@ psutil_proc_memory_uss(PyObject *self, PyObject *args) {
// Roughly based on libtop_update_vm_regions in
// http://www.opensource.apple.com/source/top/top-100.1.2/libtop.c
- for (mach_vm_address_t addr = MACH_VM_MIN_ADDRESS; ; addr += size) {
- vm_region_top_info_data_t info;
- mach_port_t object_name;
-
+ for (addr = 0; ; addr += size) {
kr = mach_vm_region(
task, &addr, &size, VM_REGION_TOP_INFO, (vm_region_info_t)&info,
&info_count, &object_name);
@@ -612,7 +612,8 @@ psutil_proc_memory_uss(PyObject *self, PyObject *args) {
break;
}
else if (kr != KERN_SUCCESS) {
- return false;
+ PyErr_Format(PyExc_RuntimeError, "mach_vm_region() failed");
+ return NULL;
}
if (psutil_in_shared_region(addr, cpu_type) &&
diff --git a/psutil/tests/__init__.py b/psutil/tests/__init__.py
index 7ff5133f..a3a8f1ba 100644
--- a/psutil/tests/__init__.py
+++ b/psutil/tests/__init__.py
@@ -82,6 +82,7 @@ TESTFN = os.path.join(os.getcwd(), "$testfile")
TESTFN_UNICODE = TESTFN + "ƒőő"
TESTFILE_PREFIX = 'psutil-test-suite-'
TOX = os.getenv('TOX') or '' in ('1', 'true')
+PYPY = '__pypy__' in sys.builtin_module_names
if not PY3:
try:
TESTFN_UNICODE = unicode(TESTFN_UNICODE, sys.getfilesystemencoding())
diff --git a/psutil/tests/test_linux.py b/psutil/tests/test_linux.py
index a9545991..67da1b54 100644
--- a/psutil/tests/test_linux.py
+++ b/psutil/tests/test_linux.py
@@ -33,6 +33,7 @@ from psutil.tests import call_until
from psutil.tests import get_kernel_version
from psutil.tests import importlib
from psutil.tests import MEMORY_TOLERANCE
+from psutil.tests import PYPY
from psutil.tests import pyrun
from psutil.tests import reap_children
from psutil.tests import retry_before_failing
@@ -764,13 +765,16 @@ class TestProcess(unittest.TestCase):
time.sleep(.1)
mem = p.memory_full_info()
maps = p.memory_maps(grouped=False)
- self.assertEqual(
- mem.uss, sum([x.private_dirty + x.private_clean for x in maps]))
- self.assertEqual(
- mem.pss, sum([x.pss for x in maps]))
- self.assertEqual(
- mem.swap, sum([x.swap for x in maps]))
-
+ self.assertAlmostEqual(
+ mem.uss, sum([x.private_dirty + x.private_clean for x in maps]),
+ delta=4096)
+ self.assertAlmostEqual(
+ mem.pss, sum([x.pss for x in maps]), delta=4096)
+ self.assertAlmostEqual(
+ mem.swap, sum([x.swap for x in maps]), delta=4096)
+
+ # On PYPY file descriptors are not closed fast enough.
+ @unittest.skipIf(PYPY, "skipped on PYPY")
def test_open_files_mode(self):
def get_test_file():
p = psutil.Process()
diff --git a/psutil/tests/test_process.py b/psutil/tests/test_process.py
index 477c412c..79d28b19 100644
--- a/psutil/tests/test_process.py
+++ b/psutil/tests/test_process.py
@@ -65,6 +65,7 @@ from psutil.tests import get_test_subprocess
from psutil.tests import get_winver
from psutil.tests import GLOBAL_TIMEOUT
from psutil.tests import pyrun
+from psutil.tests import PYPY
from psutil.tests import PYTHON
from psutil.tests import reap_children
from psutil.tests import retry_before_failing
@@ -425,6 +426,11 @@ class TestProcess(unittest.TestCase):
self.assertGreaterEqual(value, 0)
if name in dir(resource):
self.assertEqual(value, getattr(resource, name))
+ # XXX - On PyPy RLIMIT_INFINITY returned by
+ # resource.getrlimit() is reported as a very big long
+ # number instead of -1. It looks like a bug with PyPy.
+ if PYPY:
+ continue
self.assertEqual(p.rlimit(value), resource.getrlimit(value))
else:
ret = p.rlimit(value)