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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }