@@ -409,46 +409,63 @@ PyFunction_New(PyObject *code, PyObject *globals)
409
409
PyObject *
410
410
PyFunction_GetCode (PyObject * op )
411
411
{
412
+ PyObject * code = NULL ;
413
+ Py_BEGIN_CRITICAL_SECTION (op );
412
414
if (!PyFunction_Check (op )) {
413
415
PyErr_BadInternalCall ();
414
416
return NULL ;
415
417
}
416
- return ((PyFunctionObject * ) op ) -> func_code ;
418
+ code = ((PyFunctionObject * ) op ) -> func_code ;
419
+ Py_END_CRITICAL_SECTION ();
420
+ return code ;
417
421
}
418
422
419
423
PyObject *
420
424
PyFunction_GetGlobals (PyObject * op )
421
425
{
426
+ PyObject * globals = NULL ;
427
+ Py_BEGIN_CRITICAL_SECTION (op );
422
428
if (!PyFunction_Check (op )) {
423
429
PyErr_BadInternalCall ();
424
430
return NULL ;
425
431
}
426
- return ((PyFunctionObject * ) op ) -> func_globals ;
432
+ globals = ((PyFunctionObject * ) op ) -> func_globals ;
433
+ Py_END_CRITICAL_SECTION ();
434
+ return globals ;
427
435
}
428
436
429
437
PyObject *
430
438
PyFunction_GetModule (PyObject * op )
431
439
{
440
+ PyObject * module = NULL ;
441
+ Py_BEGIN_CRITICAL_SECTION (op );
432
442
if (!PyFunction_Check (op )) {
433
443
PyErr_BadInternalCall ();
434
444
return NULL ;
435
445
}
436
- return ((PyFunctionObject * ) op ) -> func_module ;
446
+ module = ((PyFunctionObject * ) op ) -> func_module ;
447
+ Py_END_CRITICAL_SECTION ();
448
+ return module ;
437
449
}
438
450
439
451
PyObject *
440
452
PyFunction_GetDefaults (PyObject * op )
441
453
{
454
+ PyObject * defaults = NULL ;
455
+ Py_BEGIN_CRITICAL_SECTION (op );
442
456
if (!PyFunction_Check (op )) {
443
457
PyErr_BadInternalCall ();
444
458
return NULL ;
445
459
}
446
- return ((PyFunctionObject * ) op ) -> func_defaults ;
460
+ defaults = ((PyFunctionObject * ) op ) -> func_defaults ;
461
+ Py_END_CRITICAL_SECTION ();
462
+ return defaults ;
447
463
}
448
464
449
465
int
450
466
PyFunction_SetDefaults (PyObject * op , PyObject * defaults )
451
467
{
468
+ Py_BEGIN_CRITICAL_SECTION (op );
452
469
if (!PyFunction_Check (op )) {
453
470
PyErr_BadInternalCall ();
454
471
return -1 ;
@@ -462,7 +479,6 @@ PyFunction_SetDefaults(PyObject *op, PyObject *defaults)
462
479
PyErr_SetString (PyExc_SystemError , "non-tuple default args" );
463
480
return -1 ;
464
481
}
465
- Py_BEGIN_CRITICAL_SECTION (op );
466
482
handle_func_event (PyFunction_EVENT_MODIFY_DEFAULTS ,
467
483
(PyFunctionObject * ) op , defaults );
468
484
_PyFunction_ClearVersion ((PyFunctionObject * )op );
@@ -976,14 +992,13 @@ static PyObject *
976
992
function___annotations___get_impl (PyFunctionObject * self )
977
993
/*[clinic end generated code: output=a4cf4c884c934cbb input=92643d7186c1ad0c]*/
978
994
{
979
- PyObject * d = NULL ;
980
995
if (self -> func_annotations == NULL &&
981
996
(self -> func_annotate == NULL || !PyCallable_Check (self -> func_annotate ))) {
982
997
self -> func_annotations = PyDict_New ();
983
998
if (self -> func_annotations == NULL )
984
999
return NULL ;
985
1000
}
986
- d = func_get_annotation_dict (self );
1001
+ PyObject * d = func_get_annotation_dict (self );
987
1002
return Py_XNewRef (d );
988
1003
}
989
1004
@@ -1244,9 +1259,8 @@ static PyObject*
1244
1259
func_repr (PyObject * self )
1245
1260
{
1246
1261
PyFunctionObject * op = _PyFunction_CAST (self );
1247
- PyObject * func_name = FT_ATOMIC_LOAD_PTR (op -> func_qualname );
1248
1262
return PyUnicode_FromFormat ("<function %U at %p>" ,
1249
- func_name , op );
1263
+ op -> func_qualname , op );
1250
1264
}
1251
1265
1252
1266
static int
0 commit comments