Commit beaf6a02 authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #7084: Fix a (very unlikely) crash when printing a list from one

thread, and mutating it from another one.  Patch by Scott Dial.
parent a4314c2b
...@@ -175,6 +175,7 @@ Arnaud Delobelle ...@@ -175,6 +175,7 @@ Arnaud Delobelle
Erik Demaine Erik Demaine
Roger Dev Roger Dev
Raghuram Devarakonda Raghuram Devarakonda
Scott Dial
Toby Dickenson Toby Dickenson
Mark Dickinson Mark Dickinson
Jack Diederich Jack Diederich
......
...@@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 1 ...@@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 1
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #7084: Fix a (very unlikely) crash when printing a list from one
thread, and mutating it from another one. Patch by Scott Dial.
- Issue #1571184: The Unicode database contains properties for more characters. - Issue #1571184: The Unicode database contains properties for more characters.
The tables for code points representing numeric values, white spaces or line The tables for code points representing numeric values, white spaces or line
breaks are now generated from the official Unicode Character Database files, breaks are now generated from the official Unicode Character Database files,
......
...@@ -319,6 +319,7 @@ list_print(PyListObject *op, FILE *fp, int flags) ...@@ -319,6 +319,7 @@ list_print(PyListObject *op, FILE *fp, int flags)
{ {
int rc; int rc;
Py_ssize_t i; Py_ssize_t i;
PyObject *item;
rc = Py_ReprEnter((PyObject*)op); rc = Py_ReprEnter((PyObject*)op);
if (rc != 0) { if (rc != 0) {
...@@ -333,15 +334,19 @@ list_print(PyListObject *op, FILE *fp, int flags) ...@@ -333,15 +334,19 @@ list_print(PyListObject *op, FILE *fp, int flags)
fprintf(fp, "["); fprintf(fp, "[");
Py_END_ALLOW_THREADS Py_END_ALLOW_THREADS
for (i = 0; i < Py_SIZE(op); i++) { for (i = 0; i < Py_SIZE(op); i++) {
item = op->ob_item[i];
Py_INCREF(item);
if (i > 0) { if (i > 0) {
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
fprintf(fp, ", "); fprintf(fp, ", ");
Py_END_ALLOW_THREADS Py_END_ALLOW_THREADS
} }
if (PyObject_Print(op->ob_item[i], fp, 0) != 0) { if (PyObject_Print(item, fp, 0) != 0) {
Py_DECREF(item);
Py_ReprLeave((PyObject *)op); Py_ReprLeave((PyObject *)op);
return -1; return -1;
} }
Py_DECREF(item);
} }
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
fprintf(fp, "]"); fprintf(fp, "]");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment