bpo-38631: Replace Py_FatalError() with _PyObject_ASSERT_FAILED_MSG() by vstinner · Pull Request #18258 · python/cpython

@vstinner

Replace Py_FatalError() with _PyObject_ASSERT_FAILED_MSG() in
object.c and typeobject.c to also dump the involved Python object on
a fatal error. It should ease debug when such fatal error occurs.

If the double linked list is inconsistent, _Py_ForgetReference() no
longer dumps previous and next objects in the fatal error, it now
only dumps the current object. It should prevent to get a crash when
dumping an invalid object, before writing the error message.

Enhance _Py_ForgetReference() error messages;
_PyObject_ASSERT_FAILED_MSG() logs the "_Py_ForgetReference" function
name.

@vstinner vstinner changed the title Replace Py_FatalError() with _PyObject_ASSERT_FAILED_MSG() bpo-38631: Replace Py_FatalError() with _PyObject_ASSERT_FAILED_MSG()

Jan 29, 2020

@vstinner vstinner merged commit 5eb8bff into python:master

Jan 30, 2020

8 checks passed

Azure Pipelines PR #20200129.52 succeeded

Details

bedevere/issue-number Issue number 38631 found

Details

bedevere/news "skip news" label found

continuous-integration/travis-ci/pr The Travis CI build passed

Details

@vstinner vstinner deleted the vstinner:assert_failed branch

Jan 30, 2020

shihai1991 added a commit to shihai1991/cpython that referenced this pull request

Jan 31, 2020
…pythonGH-18258)

Replace Py_FatalError() with _PyObject_ASSERT_FAILED_MSG() in
object.c and typeobject.c to also dump the involved Python object on
a fatal error. It should ease debug when such fatal error occurs.

If the double linked list is inconsistent, _Py_ForgetReference() no
longer dumps previous and next objects in the fatal error, it now
only dumps the current object. It ensures that the error message
is displayed even if dumping the object does crash Python.

Enhance _Py_ForgetReference() error messages;
_PyObject_ASSERT_FAILED_MSG() logs the "_Py_ForgetReference" function
name.