Mercurial > cpython-lru_cache-weakref
annotate Modules/resource.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 796c21e27a92 |
| children |
| rev | line source |
|---|---|
|
6052
1da122718598
Added std copyright notice.
Guido van Rossum <guido@python.org>
parents:
5941
diff
changeset
|
1 |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 #include "Python.h" |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 #include <sys/resource.h> |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 #include <sys/time.h> |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 #include <string.h> |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 #include <errno.h> |
|
28454
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
7 /* for sysconf */ |
|
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
8 #if defined(HAVE_UNISTD_H) |
|
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
9 #include <unistd.h> |
|
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
10 #endif |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 |
|
6082
d7ca0554795e
Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents:
6052
diff
changeset
|
12 /* On some systems, these aren't in any header file. |
|
d7ca0554795e
Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents:
6052
diff
changeset
|
13 On others they are, with inconsistent prototypes. |
|
d7ca0554795e
Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents:
6052
diff
changeset
|
14 We declare the (default) return type, to shut up gcc -Wall; |
|
d7ca0554795e
Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents:
6052
diff
changeset
|
15 but we can't declare the prototype, to avoid errors |
|
d7ca0554795e
Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents:
6052
diff
changeset
|
16 when the header files declare it different. |
|
d7ca0554795e
Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents:
6052
diff
changeset
|
17 Worse, on some Linuxes, getpagesize() returns a size_t... */ |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 #define doubletime(TV) ((double)(TV).tv_sec + (TV).tv_usec * 0.000001) |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23250
diff
changeset
|
21 PyDoc_STRVAR(struct_rusage__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23250
diff
changeset
|
22 "struct_rusage: Result from getrusage.\n\n" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23250
diff
changeset
|
23 "This object may be accessed either as a tuple of\n" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23250
diff
changeset
|
24 " (utime,stime,maxrss,ixrss,idrss,isrss,minflt,majflt,\n" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23250
diff
changeset
|
25 " nswap,inblock,oublock,msgsnd,msgrcv,nsignals,nvcsw,nivcsw)\n" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23250
diff
changeset
|
26 "or via the attributes ru_utime, ru_stime, ru_maxrss, and so on."); |
|
22899
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
27 |
|
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
28 static PyStructSequence_Field struct_rusage_fields[] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
29 {"ru_utime", "user time used"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
30 {"ru_stime", "system time used"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
31 {"ru_maxrss", "max. resident set size"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
32 {"ru_ixrss", "shared memory size"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
33 {"ru_idrss", "unshared data size"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
34 {"ru_isrss", "unshared stack size"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
35 {"ru_minflt", "page faults not requiring I/O"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
36 {"ru_majflt", "page faults requiring I/O"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
37 {"ru_nswap", "number of swap outs"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
38 {"ru_inblock", "block input operations"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
39 {"ru_oublock", "block output operations"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
40 {"ru_msgsnd", "IPC messages sent"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
41 {"ru_msgrcv", "IPC messages received"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
42 {"ru_nsignals", "signals received"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
43 {"ru_nvcsw", "voluntary context switches"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
44 {"ru_nivcsw", "involuntary context switches"}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
45 {0} |
|
22899
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
46 }; |
|
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
47 |
|
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
48 static PyStructSequence_Desc struct_rusage_desc = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
49 "resource.struct_rusage", /* name */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
50 struct_rusage__doc__, /* doc */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
51 struct_rusage_fields, /* fields */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
52 16 /* n_in_sequence */ |
|
22899
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
53 }; |
|
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
54 |
|
37772
b90a7c6021bc
Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
55 static int initialized; |
|
22899
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
56 static PyTypeObject StructRUsageType; |
|
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
57 |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
59 resource_getrusage(PyObject *self, PyObject *args) |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
61 int who; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
62 struct rusage ru; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
63 PyObject *result; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
65 if (!PyArg_ParseTuple(args, "i:getrusage", &who)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
66 return NULL; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
68 if (getrusage(who, &ru) == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
69 if (errno == EINVAL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
70 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
71 "invalid who parameter"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
72 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
73 } |
|
73930
8d670cb0d64a
alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents:
66555
diff
changeset
|
74 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
75 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
76 } |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
78 result = PyStructSequence_New(&StructRUsageType); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
79 if (!result) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
80 return NULL; |
|
22899
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
81 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
82 PyStructSequence_SET_ITEM(result, 0, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
83 PyFloat_FromDouble(doubletime(ru.ru_utime))); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
84 PyStructSequence_SET_ITEM(result, 1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
85 PyFloat_FromDouble(doubletime(ru.ru_stime))); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
86 PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong(ru.ru_maxrss)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
87 PyStructSequence_SET_ITEM(result, 3, PyLong_FromLong(ru.ru_ixrss)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
88 PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong(ru.ru_idrss)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
89 PyStructSequence_SET_ITEM(result, 5, PyLong_FromLong(ru.ru_isrss)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
90 PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(ru.ru_minflt)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
91 PyStructSequence_SET_ITEM(result, 7, PyLong_FromLong(ru.ru_majflt)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
92 PyStructSequence_SET_ITEM(result, 8, PyLong_FromLong(ru.ru_nswap)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
93 PyStructSequence_SET_ITEM(result, 9, PyLong_FromLong(ru.ru_inblock)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
94 PyStructSequence_SET_ITEM(result, 10, PyLong_FromLong(ru.ru_oublock)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
95 PyStructSequence_SET_ITEM(result, 11, PyLong_FromLong(ru.ru_msgsnd)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
96 PyStructSequence_SET_ITEM(result, 12, PyLong_FromLong(ru.ru_msgrcv)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
97 PyStructSequence_SET_ITEM(result, 13, PyLong_FromLong(ru.ru_nsignals)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
98 PyStructSequence_SET_ITEM(result, 14, PyLong_FromLong(ru.ru_nvcsw)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
99 PyStructSequence_SET_ITEM(result, 15, PyLong_FromLong(ru.ru_nivcsw)); |
|
22899
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
100 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
101 if (PyErr_Occurred()) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
102 Py_DECREF(result); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
103 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
104 } |
|
22899
c0d7b5788cbe
Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents:
22502
diff
changeset
|
105 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
106 return result; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 } |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 |
|
86566
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
109 static int |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
110 py2rlimit(PyObject *curobj, PyObject *maxobj, struct rlimit *rl_out) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
111 { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
112 #if !defined(HAVE_LARGEFILE_SUPPORT) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
113 rl_out->rlim_cur = PyLong_AsLong(curobj); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
114 if (rl_out->rlim_cur == (rlim_t)-1 && PyErr_Occurred()) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
115 return -1; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
116 rl_out->rlim_max = PyLong_AsLong(maxobj); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
117 if (rl_out->rlim_max == (rlim_t)-1 && PyErr_Occurred()) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
118 return -1; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
119 #else |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
120 /* The limits are probably bigger than a long */ |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
121 rl_out->rlim_cur = PyLong_AsLongLong(curobj); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
122 if (rl_out->rlim_cur == (rlim_t)-1 && PyErr_Occurred()) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
123 return -1; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
124 rl_out->rlim_max = PyLong_AsLongLong(maxobj); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
125 if (rl_out->rlim_max == (rlim_t)-1 && PyErr_Occurred()) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
126 return -1; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
127 #endif |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
128 |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
129 rl_out->rlim_cur = rl_out->rlim_cur & RLIM_INFINITY; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
130 rl_out->rlim_max = rl_out->rlim_max & RLIM_INFINITY; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
131 return 0; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
132 |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
133 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
134 |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
135 static PyObject* |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
136 rlimit2py(struct rlimit rl) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
137 { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
138 #if defined(HAVE_LONG_LONG) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
139 if (sizeof(rl.rlim_cur) > sizeof(long)) { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
140 return Py_BuildValue("LL", |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
141 (PY_LONG_LONG) rl.rlim_cur, |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
142 (PY_LONG_LONG) rl.rlim_max); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
143 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
144 #endif |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
145 return Py_BuildValue("ll", (long) rl.rlim_cur, (long) rl.rlim_max); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
146 } |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
149 resource_getrlimit(PyObject *self, PyObject *args) |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
151 struct rlimit rl; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
152 int resource; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
154 if (!PyArg_ParseTuple(args, "i:getrlimit", &resource)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
155 return NULL; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
157 if (resource < 0 || resource >= RLIM_NLIMITS) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
158 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
159 "invalid resource specified"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
160 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
161 } |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
163 if (getrlimit(resource, &rl) == -1) { |
|
73930
8d670cb0d64a
alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents:
66555
diff
changeset
|
164 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
165 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
166 } |
|
86566
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
167 return rlimit2py(rl); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 } |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
171 resource_setrlimit(PyObject *self, PyObject *args) |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
173 struct rlimit rl; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
174 int resource; |
|
81987
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
175 PyObject *limits, *curobj, *maxobj; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
176 |
|
81987
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
177 if (!PyArg_ParseTuple(args, "iO:setrlimit", &resource, &limits)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
178 return NULL; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
180 if (resource < 0 || resource >= RLIM_NLIMITS) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
181 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
182 "invalid resource specified"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
183 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
184 } |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
185 |
|
81987
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
186 limits = PySequence_Tuple(limits); |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
187 if (!limits) |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
188 /* Here limits is a borrowed reference */ |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
189 return NULL; |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
190 |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
191 if (PyTuple_GET_SIZE(limits) != 2) { |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
192 PyErr_SetString(PyExc_ValueError, |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
193 "expected a tuple of 2 integers"); |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
194 goto error; |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
195 } |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
196 curobj = PyTuple_GET_ITEM(limits, 0); |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
197 maxobj = PyTuple_GET_ITEM(limits, 1); |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
198 |
|
86566
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
199 if (py2rlimit(curobj, maxobj, &rl) < 0) { |
|
81987
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
200 goto error; |
|
86566
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
201 } |
|
9787
1beaf9179125
Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents:
6798
diff
changeset
|
202 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
203 if (setrlimit(resource, &rl) == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
204 if (errno == EINVAL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
205 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
206 "current limit exceeds maximum limit"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
207 else if (errno == EPERM) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
208 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
209 "not allowed to raise maximum limit"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
210 else |
|
73930
8d670cb0d64a
alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents:
66555
diff
changeset
|
211 PyErr_SetFromErrno(PyExc_OSError); |
|
81987
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
212 goto error; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
213 } |
|
81987
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
214 Py_DECREF(limits); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
215 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
216 return Py_None; |
|
81987
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
217 |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
218 error: |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
219 Py_DECREF(limits); |
|
4bac47eb444c
Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents:
66555
diff
changeset
|
220 return NULL; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 } |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 |
|
86566
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
223 #ifdef HAVE_PRLIMIT |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
224 static PyObject * |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
225 resource_prlimit(PyObject *self, PyObject *args) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
226 { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
227 struct rlimit old_limit, new_limit; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
228 int resource, retval; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
229 pid_t pid; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
230 PyObject *curobj=NULL, *maxobj=NULL; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
231 |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
232 if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i|(OO):prlimit", |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
233 &pid, &resource, &curobj, &maxobj)) |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
234 return NULL; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
235 |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
236 if (resource < 0 || resource >= RLIM_NLIMITS) { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
237 PyErr_SetString(PyExc_ValueError, |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
238 "invalid resource specified"); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
239 return NULL; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
240 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
241 |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
242 if (curobj != NULL) { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
243 if (py2rlimit(curobj, maxobj, &new_limit) < 0) { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
244 return NULL; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
245 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
246 retval = prlimit(pid, resource, &new_limit, &old_limit); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
247 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
248 else { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
249 retval = prlimit(pid, resource, NULL, &old_limit); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
250 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
251 |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
252 if (retval == -1) { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
253 if (errno == EINVAL) { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
254 PyErr_SetString(PyExc_ValueError, |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
255 "current limit exceeds maximum limit"); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
256 } else { |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
257 PyErr_SetFromErrno(PyExc_OSError); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
258 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
259 return NULL; |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
260 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
261 return rlimit2py(old_limit); |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
262 } |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
263 #endif /* HAVE_PRLIMIT */ |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
264 |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
265 static PyObject * |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
37772
diff
changeset
|
266 resource_getpagesize(PyObject *self, PyObject *unused) |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
268 long pagesize = 0; |
|
28454
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
269 #if defined(HAVE_GETPAGESIZE) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
270 pagesize = getpagesize(); |
|
28454
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
271 #elif defined(HAVE_SYSCONF) |
|
33095
ddd24d72ad6a
Patch #1005568: Use _SC_PAGESIZE on Irix.
Martin v. Löwis <martin@v.loewis.de>
parents:
28461
diff
changeset
|
272 #if defined(_SC_PAGE_SIZE) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
273 pagesize = sysconf(_SC_PAGE_SIZE); |
|
33095
ddd24d72ad6a
Patch #1005568: Use _SC_PAGESIZE on Irix.
Martin v. Löwis <martin@v.loewis.de>
parents:
28461
diff
changeset
|
274 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
275 /* Irix 5.3 has _SC_PAGESIZE, but not _SC_PAGE_SIZE */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
276 pagesize = sysconf(_SC_PAGESIZE); |
|
33095
ddd24d72ad6a
Patch #1005568: Use _SC_PAGESIZE on Irix.
Martin v. Löwis <martin@v.loewis.de>
parents:
28461
diff
changeset
|
277 #endif |
|
28454
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
278 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
279 return Py_BuildValue("i", pagesize); |
|
28454
f3078654a5c0
Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents:
28437
diff
changeset
|
280 |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 } |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
283 /* List of functions */ |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 static struct PyMethodDef |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 resource_methods[] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
287 {"getrusage", resource_getrusage, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
288 {"getrlimit", resource_getrlimit, METH_VARARGS}, |
|
86566
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
289 #ifdef HAVE_PRLIMIT |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
290 {"prlimit", resource_prlimit, METH_VARARGS}, |
|
796c21e27a92
Issue #16595: Add prlimit() to resource module
Christian Heimes <christian@cheimes.de>
parents:
86565
diff
changeset
|
291 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
292 {"setrlimit", resource_setrlimit, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
293 {"getpagesize", resource_getpagesize, METH_NOARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
294 {NULL, NULL} /* sentinel */ |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 }; |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 /* Module initialization */ |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
300 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
301 static struct PyModuleDef resourcemodule = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
302 PyModuleDef_HEAD_INIT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
303 "resource", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
304 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
305 -1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
306 resource_methods, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
307 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
308 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
309 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
310 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
311 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
312 |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
23832
diff
changeset
|
313 PyMODINIT_FUNC |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
314 PyInit_resource(void) |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
315 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
316 PyObject *m, *v; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
318 /* Create the module and add the functions */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
319 m = PyModule_Create(&resourcemodule); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
320 if (m == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
321 return NULL; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
323 /* Add some symbolic constants to the module */ |
|
73930
8d670cb0d64a
alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents:
66555
diff
changeset
|
324 Py_INCREF(PyExc_OSError); |
|
8d670cb0d64a
alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents:
66555
diff
changeset
|
325 PyModule_AddObject(m, "error", PyExc_OSError); |
|
84793
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
326 if (!initialized) { |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
327 if (PyStructSequence_InitType2(&StructRUsageType, |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
328 &struct_rusage_desc) < 0) |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
329 return NULL; |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
330 } |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
331 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
332 Py_INCREF(&StructRUsageType); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
333 PyModule_AddObject(m, "struct_rusage", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
334 (PyObject*) &StructRUsageType); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
335 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
336 /* insert constants */ |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
337 #ifdef RLIMIT_CPU |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
338 PyModule_AddIntMacro(m, RLIMIT_CPU); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
339 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
340 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
341 #ifdef RLIMIT_FSIZE |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
342 PyModule_AddIntMacro(m, RLIMIT_FSIZE); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
344 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 #ifdef RLIMIT_DATA |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
346 PyModule_AddIntMacro(m, RLIMIT_DATA); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
347 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
348 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
349 #ifdef RLIMIT_STACK |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
350 PyModule_AddIntMacro(m, RLIMIT_STACK); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
351 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
352 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
353 #ifdef RLIMIT_CORE |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
354 PyModule_AddIntMacro(m, RLIMIT_CORE); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 #ifdef RLIMIT_NOFILE |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
358 PyModule_AddIntMacro(m, RLIMIT_NOFILE); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
359 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
360 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
361 #ifdef RLIMIT_OFILE |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
362 PyModule_AddIntMacro(m, RLIMIT_OFILE); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 #ifdef RLIMIT_VMEM |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
366 PyModule_AddIntMacro(m, RLIMIT_VMEM); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
368 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
369 #ifdef RLIMIT_AS |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
370 PyModule_AddIntMacro(m, RLIMIT_AS); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
373 #ifdef RLIMIT_RSS |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
374 PyModule_AddIntMacro(m, RLIMIT_RSS); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
375 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
376 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
377 #ifdef RLIMIT_NPROC |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
378 PyModule_AddIntMacro(m, RLIMIT_NPROC); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
379 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
380 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
381 #ifdef RLIMIT_MEMLOCK |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
382 PyModule_AddIntMacro(m, RLIMIT_MEMLOCK); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
383 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
384 |
|
39850
1660eaa0cc26
Patch #1557515: Add RLIMIT_SBSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents:
38489
diff
changeset
|
385 #ifdef RLIMIT_SBSIZE |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
386 PyModule_AddIntMacro(m, RLIMIT_SBSIZE); |
|
39850
1660eaa0cc26
Patch #1557515: Add RLIMIT_SBSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents:
38489
diff
changeset
|
387 #endif |
|
1660eaa0cc26
Patch #1557515: Add RLIMIT_SBSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents:
38489
diff
changeset
|
388 |
|
86565
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
389 /* Linux specific */ |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
390 #ifdef RLIMIT_MSGQUEUE |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
391 PyModule_AddIntMacro(m, RLIMIT_MSGQUEUE); |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
392 #endif |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
393 |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
394 #ifdef RLIMIT_NICE |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
395 PyModule_AddIntMacro(m, RLIMIT_NICE); |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
396 #endif |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
397 |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
398 #ifdef RLIMIT_RTPRIO |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
399 PyModule_AddIntMacro(m, RLIMIT_RTPRIO); |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
400 #endif |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
401 |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
402 #ifdef RLIMIT_RTTIME |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
403 PyModule_AddIntMacro(m, RLIMIT_RTTIME); |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
404 #endif |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
405 |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
406 #ifdef RLIMIT_SIGPENDING |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
407 PyModule_AddIntMacro(m, RLIMIT_SIGPENDING); |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
408 #endif |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
409 |
|
aec95b369e60
Issue #19324: Expose Linux-specific constants in resource module
Christian Heimes <christian@cheimes.de>
parents:
84793
diff
changeset
|
410 /* target */ |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
411 #ifdef RUSAGE_SELF |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
412 PyModule_AddIntMacro(m, RUSAGE_SELF); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
413 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
414 |
|
6798
0ba50c7429e5
Typo: RUSAGE_CHILDERN -> RUSAGE_CHILDREN.
Guido van Rossum <guido@python.org>
parents:
6536
diff
changeset
|
415 #ifdef RUSAGE_CHILDREN |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
416 PyModule_AddIntMacro(m, RUSAGE_CHILDREN); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
417 #endif |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
418 |
|
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
419 #ifdef RUSAGE_BOTH |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
420 PyModule_AddIntMacro(m, RUSAGE_BOTH); |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
421 #endif |
|
22502
5b8be8611d8c
Expose RLIM_INFINITY constant. Closes SF patch 489066.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
21943
diff
changeset
|
422 |
|
66216
0d1b66230247
Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
423 #ifdef RUSAGE_THREAD |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
81988
diff
changeset
|
424 PyModule_AddIntMacro(m, RUSAGE_THREAD); |
|
66216
0d1b66230247
Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
425 #endif |
|
0d1b66230247
Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
426 |
|
22502
5b8be8611d8c
Expose RLIM_INFINITY constant. Closes SF patch 489066.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
21943
diff
changeset
|
427 #if defined(HAVE_LONG_LONG) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
428 if (sizeof(RLIM_INFINITY) > sizeof(long)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
429 v = PyLong_FromLongLong((PY_LONG_LONG) RLIM_INFINITY); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
430 } else |
|
22502
5b8be8611d8c
Expose RLIM_INFINITY constant. Closes SF patch 489066.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
21943
diff
changeset
|
431 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
432 { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
433 v = PyLong_FromLong((long) RLIM_INFINITY); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
434 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
435 if (v) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
436 PyModule_AddObject(m, "RLIM_INFINITY", v); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
437 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
438 initialized = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53929
diff
changeset
|
439 return m; |
|
4770
72108faa56bf
Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
440 } |
