New submission from Bernie Hackett: While running PyMongo's test suite against python 3.5.0 the interpreter inconsistently aborts when we test encoding a recursive data structure like:
evil = {} evil['evil'] = evil The test that triggers this was added to test the use of Py_EnterRecursiveCall in PyMongo's C extensions and passes without issues on all previous CPython releases back to 2.4.x (the oldest version PyMongo supports). The interesting thing about this abort is that it only occurs when testing PyMongo *without* its C extensions. The stacktrace looks like this: test_bad_encode (test_bson.TestBSON) ... Exception ignored in: <bound method PeriodicExecutor.close of <pymongo.periodic _executor.PeriodicExecutor object at 0x00000000046AB0F0>> RecursionError: maximum recursion depth exceeded while calling a Python object Fatal Python error: Cannot recover from stack overflow. Thread 0x00000b6c (most recent call first): File "C:\10gen\mongo-python-driver\pymongo\periodic_executor.py", line 105 in _run File "C:\Python35\lib\threading.py", line 871 in run File "C:\Python35\lib\threading.py", line 923 in _bootstrap_inner File "C:\Python35\lib\threading.py", line 891 in _bootstrap Thread 0x00000690 (most recent call first): File "C:\Python35\lib\threading.py", line 297 in wait File "C:\10gen\mongo-python-driver\pymongo\thread_util.py", line 199 in wait File "C:\10gen\mongo-python-driver\pymongo\periodic_executor.py", line 110 in _run File "C:\Python35\lib\threading.py", line 871 in run File "C:\Python35\lib\threading.py", line 923 in _bootstrap_inner File "C:\Python35\lib\threading.py", line 891 in _bootstrap Thread 0x00000900 (most recent call first): File "C:\Python35\lib\threading.py", line 297 in wait File "C:\10gen\mongo-python-driver\pymongo\thread_util.py", line 199 in wait File "C:\10gen\mongo-python-driver\pymongo\periodic_executor.py", line 110 in _run File "C:\Python35\lib\threading.py", line 871 in run File "C:\Python35\lib\threading.py", line 923 in _bootstrap_inner File "C:\Python35\lib\threading.py", line 891 in _bootstrap Current thread 0x00000a20 (most recent call first): File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 433 in _encode_mapping File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in <listcomp> File "C:\10gen\mongo-python-driver\bson\__init__.py", line 462 in _encode_list File "C:\10gen\mongo-python-driver\bson\__init__.py", line 653 in _name_value_to_bson File "C:\10gen\mongo-python-driver\bson\__init__.py", line 692 in _element_to_bson My current working theory is if RecursionError is raised during a thread switch the recursion depth is deemed too great to recover from. Maybe the GIL is no longer being held during some call to _Py_CheckRecursiveCall? This failure looks suspiciously similar to issue22971 given that, in that ticket, the failure occurs while or immediately after running test_thread. The failure has been observed on 64 and 32bit Windows 7 VMs as well as a 64bit Amazon Linux instance. Sadly, I haven't yet been able to devise a reproduction that doesn't involve running PyMongo's test suite. ---------- components: Interpreter Core messages: 251453 nosy: behackett priority: normal severity: normal status: open title: 3.5.0 regression - Fatal Python error: Cannot recover from stack overflow versions: Python 3.5 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue25222> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com