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 <[email protected]>
<http://bugs.python.org/issue25222>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com