]> granicus.if.org Git - python/commitdiff
closes bpo-34650: Check if sched_getscheduler returns ENOSYS before declaring it...
authorBenjamin Peterson <benjamin@python.org>
Wed, 12 Sep 2018 22:12:24 +0000 (15:12 -0700)
committerGitHub <noreply@github.com>
Wed, 12 Sep 2018 22:12:24 +0000 (15:12 -0700)
musl doesn't support the scheduler API, but declares stubs that alway return ENOSYS.

Lib/test/test_posix.py

index 7a2fc263cb27dce6aa956aa196ddf65fb526351f..d402d4fb088ca24e7ca40d0831e220332bd74112 100644 (file)
@@ -25,6 +25,18 @@ _DUMMY_SYMLINK = os.path.join(tempfile.gettempdir(),
 requires_32b = unittest.skipUnless(sys.maxsize < 2**32,
         'test is only meaningful on 32-bit builds')
 
+def _supports_sched():
+    if not hasattr(posix, 'sched_getscheduler'):
+        return False
+    try:
+        posix.sched_getscheduler(0)
+    except OSError as e:
+        if e.errno == errno.ENOSYS:
+            return False
+    return True
+
+requires_sched = unittest.skipUnless(_supports_sched(), 'requires POSIX scheduler API')
+
 class PosixTester(unittest.TestCase):
 
     def setUp(self):
@@ -1273,7 +1285,7 @@ class PosixTester(unittest.TestCase):
             self.assertRaises(OSError, posix.sched_get_priority_min, -23)
             self.assertRaises(OSError, posix.sched_get_priority_max, -23)
 
-    @unittest.skipUnless(hasattr(posix, 'sched_setscheduler'), "can't change scheduler")
+    @requires_sched
     def test_get_and_set_scheduler_and_param(self):
         possible_schedulers = [sched for name, sched in posix.__dict__.items()
                                if name.startswith("SCHED_")]
@@ -1646,7 +1658,7 @@ class TestPosixSpawn(unittest.TestCase):
                               [sys.executable, "-c", "pass"],
                               os.environ, setsigdef=[signal.NSIG, signal.NSIG+1])
 
-    @unittest.skipUnless(hasattr(posix, 'sched_setscheduler'), "can't change scheduler")
+    @requires_sched
     def test_setscheduler_only_param(self):
         policy = os.sched_getscheduler(0)
         priority = os.sched_get_priority_min(policy)
@@ -1664,7 +1676,7 @@ class TestPosixSpawn(unittest.TestCase):
         )
         self.assertEqual(os.waitpid(pid, 0), (pid, 0))
 
-    @unittest.skipUnless(hasattr(posix, 'sched_setscheduler'), "can't change scheduler")
+    @requires_sched
     def test_setscheduler_with_policy(self):
         policy = os.sched_getscheduler(0)
         priority = os.sched_get_priority_min(policy)