1
- // clinic/resource.c.h uses internal pycore_modsupport.h API
2
- #ifndef Py_BUILD_CORE_BUILTIN
3
- # define Py_BUILD_CORE_MODULE 1
4
- #endif
1
+ // Need limited C API version 3.13 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
2
+ #define Py_LIMITED_API 0x030d0000
5
3
6
4
#include "Python.h"
7
5
#include <errno.h> // errno
@@ -121,24 +119,24 @@ resource_getrusage_impl(PyObject *module, int who)
121
119
if (!result )
122
120
return NULL ;
123
121
124
- PyStructSequence_SET_ITEM (result , 0 ,
122
+ PyStructSequence_SetItem (result , 0 ,
125
123
PyFloat_FromDouble (doubletime (ru .ru_utime )));
126
- PyStructSequence_SET_ITEM (result , 1 ,
124
+ PyStructSequence_SetItem (result , 1 ,
127
125
PyFloat_FromDouble (doubletime (ru .ru_stime )));
128
- PyStructSequence_SET_ITEM (result , 2 , PyLong_FromLong (ru .ru_maxrss ));
129
- PyStructSequence_SET_ITEM (result , 3 , PyLong_FromLong (ru .ru_ixrss ));
130
- PyStructSequence_SET_ITEM (result , 4 , PyLong_FromLong (ru .ru_idrss ));
131
- PyStructSequence_SET_ITEM (result , 5 , PyLong_FromLong (ru .ru_isrss ));
132
- PyStructSequence_SET_ITEM (result , 6 , PyLong_FromLong (ru .ru_minflt ));
133
- PyStructSequence_SET_ITEM (result , 7 , PyLong_FromLong (ru .ru_majflt ));
134
- PyStructSequence_SET_ITEM (result , 8 , PyLong_FromLong (ru .ru_nswap ));
135
- PyStructSequence_SET_ITEM (result , 9 , PyLong_FromLong (ru .ru_inblock ));
136
- PyStructSequence_SET_ITEM (result , 10 , PyLong_FromLong (ru .ru_oublock ));
137
- PyStructSequence_SET_ITEM (result , 11 , PyLong_FromLong (ru .ru_msgsnd ));
138
- PyStructSequence_SET_ITEM (result , 12 , PyLong_FromLong (ru .ru_msgrcv ));
139
- PyStructSequence_SET_ITEM (result , 13 , PyLong_FromLong (ru .ru_nsignals ));
140
- PyStructSequence_SET_ITEM (result , 14 , PyLong_FromLong (ru .ru_nvcsw ));
141
- PyStructSequence_SET_ITEM (result , 15 , PyLong_FromLong (ru .ru_nivcsw ));
126
+ PyStructSequence_SetItem (result , 2 , PyLong_FromLong (ru .ru_maxrss ));
127
+ PyStructSequence_SetItem (result , 3 , PyLong_FromLong (ru .ru_ixrss ));
128
+ PyStructSequence_SetItem (result , 4 , PyLong_FromLong (ru .ru_idrss ));
129
+ PyStructSequence_SetItem (result , 5 , PyLong_FromLong (ru .ru_isrss ));
130
+ PyStructSequence_SetItem (result , 6 , PyLong_FromLong (ru .ru_minflt ));
131
+ PyStructSequence_SetItem (result , 7 , PyLong_FromLong (ru .ru_majflt ));
132
+ PyStructSequence_SetItem (result , 8 , PyLong_FromLong (ru .ru_nswap ));
133
+ PyStructSequence_SetItem (result , 9 , PyLong_FromLong (ru .ru_inblock ));
134
+ PyStructSequence_SetItem (result , 10 , PyLong_FromLong (ru .ru_oublock ));
135
+ PyStructSequence_SetItem (result , 11 , PyLong_FromLong (ru .ru_msgsnd ));
136
+ PyStructSequence_SetItem (result , 12 , PyLong_FromLong (ru .ru_msgrcv ));
137
+ PyStructSequence_SetItem (result , 13 , PyLong_FromLong (ru .ru_nsignals ));
138
+ PyStructSequence_SetItem (result , 14 , PyLong_FromLong (ru .ru_nvcsw ));
139
+ PyStructSequence_SetItem (result , 15 , PyLong_FromLong (ru .ru_nivcsw ));
142
140
143
141
if (PyErr_Occurred ()) {
144
142
Py_DECREF (result );
@@ -158,13 +156,13 @@ py2rlimit(PyObject *limits, struct rlimit *rl_out)
158
156
/* Here limits is a borrowed reference */
159
157
return -1 ;
160
158
161
- if (PyTuple_GET_SIZE (limits ) != 2 ) {
159
+ if (PyTuple_Size (limits ) != 2 ) {
162
160
PyErr_SetString (PyExc_ValueError ,
163
161
"expected a tuple of 2 integers" );
164
162
goto error ;
165
163
}
166
- curobj = PyTuple_GET_ITEM (limits , 0 );
167
- maxobj = PyTuple_GET_ITEM (limits , 1 );
164
+ curobj = PyTuple_GetItem (limits , 0 ); // borrowed
165
+ maxobj = PyTuple_GetItem (limits , 1 ); // borrowed
168
166
#if !defined(HAVE_LARGEFILE_SUPPORT )
169
167
rl_out -> rlim_cur = PyLong_AsLong (curobj );
170
168
if (rl_out -> rlim_cur == (rlim_t )- 1 && PyErr_Occurred ())
0 commit comments