diff options
Diffstat (limited to 'psutil')
-rw-r--r-- | psutil/_pslinux.py | 10 | ||||
-rw-r--r-- | psutil/_psutil_osx.c | 13 | ||||
-rw-r--r-- | psutil/tests/__init__.py | 1 | ||||
-rw-r--r-- | psutil/tests/test_linux.py | 18 | ||||
-rw-r--r-- | psutil/tests/test_process.py | 6 |
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) |