Commit 686c9adb authored by Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 75367 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r75367 | antoine.pitrou | 2009-10-11 23:03:26 +0200 (dim., 11 oct. 2009) | 4 lines

  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 9aece752
...@@ -167,6 +167,7 @@ Arnaud Delobelle ...@@ -167,6 +167,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
Daniel Diniz Daniel Diniz
......
...@@ -16,6 +16,9 @@ Core and Builtins ...@@ -16,6 +16,9 @@ Core and Builtins
fixes the problem of some exceptions being thrown at shutdown when the fixes the problem of some exceptions being thrown at shutdown when the
interpreter is killed. Patch by Adam Olsen. interpreter is killed. Patch by Adam Olsen.
- Issue #7084: Fix a (very unlikely) crash when printing a list from one
thread, and mutating it from another one. Patch by Scott Dial.
Library Library
------- -------
......
...@@ -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