INADA Naoki added the comment: I think basic idea is "wrap unknown function call at least once, and preferably only once".
_PyEval_EvalFrameDefault() calls Py_EnterRecursiveCall(""). So wrapping PyFunction_(Fast)Call* with Py_EnterRecursiveCall() seems redundant. On the other hand, PyCFunction may calls method of extension module, and it can cause recursive call. So I think PyCFunction_*Call* methods calling function pointer it has (e.g. _PyCFunction_FastCallKeywords) should call Py_EnterRecursiveCall(). And caller of them can skip Py_EnterRecursiveCall(). For example, _PyObject_FastCallDict() may call _PyFunction_FastCallDict() or _PyCFunction_FastCallDict(), or tp_fastcall (via _Py_RawFastCallDict) or tp_call. It can wrap all, but wrapping only tp_fastcall and tp_call is better. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29306> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com