@@ -409,46 +409,63 @@ PyFunction_New(PyObject *code, PyObject *globals)
409409PyObject *
410410PyFunction_GetCode (PyObject * op )
411411{
412+ PyObject * code = NULL ;
413+ Py_BEGIN_CRITICAL_SECTION (op );
412414 if (!PyFunction_Check (op )) {
413415 PyErr_BadInternalCall ();
414416 return NULL ;
415417 }
416- return ((PyFunctionObject * ) op ) -> func_code ;
418+ code = ((PyFunctionObject * ) op ) -> func_code ;
419+ Py_END_CRITICAL_SECTION ();
420+ return code ;
417421}
418422
419423PyObject *
420424PyFunction_GetGlobals (PyObject * op )
421425{
426+ PyObject * globals = NULL ;
427+ Py_BEGIN_CRITICAL_SECTION (op );
422428 if (!PyFunction_Check (op )) {
423429 PyErr_BadInternalCall ();
424430 return NULL ;
425431 }
426- return ((PyFunctionObject * ) op ) -> func_globals ;
432+ globals = ((PyFunctionObject * ) op ) -> func_globals ;
433+ Py_END_CRITICAL_SECTION ();
434+ return globals ;
427435}
428436
429437PyObject *
430438PyFunction_GetModule (PyObject * op )
431439{
440+ PyObject * module = NULL ;
441+ Py_BEGIN_CRITICAL_SECTION (op );
432442 if (!PyFunction_Check (op )) {
433443 PyErr_BadInternalCall ();
434444 return NULL ;
435445 }
436- return ((PyFunctionObject * ) op ) -> func_module ;
446+ module = ((PyFunctionObject * ) op ) -> func_module ;
447+ Py_END_CRITICAL_SECTION ();
448+ return module ;
437449}
438450
439451PyObject *
440452PyFunction_GetDefaults (PyObject * op )
441453{
454+ PyObject * defaults = NULL ;
455+ Py_BEGIN_CRITICAL_SECTION (op );
442456 if (!PyFunction_Check (op )) {
443457 PyErr_BadInternalCall ();
444458 return NULL ;
445459 }
446- return ((PyFunctionObject * ) op ) -> func_defaults ;
460+ defaults = ((PyFunctionObject * ) op ) -> func_defaults ;
461+ Py_END_CRITICAL_SECTION ();
462+ return defaults ;
447463}
448464
449465int
450466PyFunction_SetDefaults (PyObject * op , PyObject * defaults )
451467{
468+ Py_BEGIN_CRITICAL_SECTION (op );
452469 if (!PyFunction_Check (op )) {
453470 PyErr_BadInternalCall ();
454471 return -1 ;
@@ -462,7 +479,6 @@ PyFunction_SetDefaults(PyObject *op, PyObject *defaults)
462479 PyErr_SetString (PyExc_SystemError , "non-tuple default args" );
463480 return -1 ;
464481 }
465- Py_BEGIN_CRITICAL_SECTION (op );
466482 handle_func_event (PyFunction_EVENT_MODIFY_DEFAULTS ,
467483 (PyFunctionObject * ) op , defaults );
468484 _PyFunction_ClearVersion ((PyFunctionObject * )op );
@@ -1244,9 +1260,8 @@ static PyObject*
12441260func_repr (PyObject * self )
12451261{
12461262 PyFunctionObject * op = _PyFunction_CAST (self );
1247- PyObject * func_name = FT_ATOMIC_LOAD_PTR (op -> func_qualname );
12481263 return PyUnicode_FromFormat ("<function %U at %p>" ,
1249- func_name , op );
1264+ op -> func_qualname , op );
12501265}
12511266
12521267static int
0 commit comments