Issue #19343: Expose FreeBSD-specific APIs in resource module. Original patch by Koobs.

This commit is contained in:
Christian Heimes 2013-12-08 14:35:55 +01:00
parent ead8d0858b
commit 5bb414d176
4 changed files with 51 additions and 0 deletions

View File

@ -217,6 +217,34 @@ platform.
.. versionadded:: 3.4
.. data:: RLIMIT_SBSIZE
The maximum size (in bytes) of socket buffer usage for this user.
This limits the amount of network memory, and hence the amount of mbufs,
that this user may hold at any time.
Availability: FreeBSD 9 or later.
.. versionadded:: 3.4
.. data:: RLIMIT_SWAP
The maximum size (in bytes) of the swap space that may be reserved or
used by all of this user id's processes.
This limit is enforced only if bit 1 of the vm.overcommit sysctl is set.
Please see :manpage:`tuning(7)` for a complete description of this sysctl.
Availability: FreeBSD 9 or later.
.. versionadded:: 3.4
.. data:: RLIMIT_NPTS
The maximum number of pseudo-terminals created by this user id.
Availability: FreeBSD 9 or later.
.. versionadded:: 3.4
Resource Usage
--------------

View File

@ -138,6 +138,12 @@ class ResourceTest(unittest.TestCase):
with contextlib.suppress(AttributeError):
self.assertIsInstance(getattr(resource, 'RLIMIT_' + attr), int)
@support.requires_freebsd_version(9)
def test_freebsd_contants(self):
for attr in ['SWAP', 'SBSIZE', 'NPTS']:
with contextlib.suppress(AttributeError):
self.assertIsInstance(getattr(resource, 'RLIMIT_' + attr), int)
@unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
@support.requires_linux_version(2, 6, 36)
def test_prlimit(self):

View File

@ -18,6 +18,9 @@ Core and Builtins
Library
-------
- Issue #19343: Expose FreeBSD-specific APIs in resource module. Original
patch by Koobs.
- Issue #19506: Use a memoryview to avoid a data copy when piping data
to stdin within subprocess.Popen.communicate. 5-10% less cpu usage.

View File

@ -424,6 +424,20 @@ PyInit_resource(void)
PyModule_AddIntMacro(m, RUSAGE_THREAD);
#endif
/* FreeBSD specific */
#ifdef RLIMIT_SWAP
PyModule_AddIntMacro(m, RLIMIT_SWAP);
#endif
#ifdef RLIMIT_SBSIZE
PyModule_AddIntMacro(m, RLIMIT_SBSIZE);
#endif
#ifdef RLIMIT_NPTS
PyModule_AddIntMacro(m, RLIMIT_NPTS);
#endif
#if defined(HAVE_LONG_LONG)
if (sizeof(RLIM_INFINITY) > sizeof(long)) {
v = PyLong_FromLongLong((PY_LONG_LONG) RLIM_INFINITY);