--- Python-3.3.0/Modules/_threadmodule.c 2013-02-26 08:37:05.000000000 +0000 +++ python/Modules/_threadmodule.c 2013-02-26 08:48:24.000000000 +0000 @@ -769,6 +769,7 @@ local_clear(localobject *self) { PyThreadState *tstate; + PyInterpreterState *interp; Py_CLEAR(self->args); Py_CLEAR(self->kw); Py_CLEAR(self->dummies); @@ -776,13 +777,18 @@ /* Remove all strong references to dummies from the thread states */ if (self->key && (tstate = PyThreadState_Get()) - && tstate->interp) { - for(tstate = PyInterpreterState_ThreadHead(tstate->interp); - tstate; - tstate = PyThreadState_Next(tstate)) { + && (interp = tstate->interp)) { + for (tstate = PyInterpreterState_ThreadHead(interp); + tstate;) { if (tstate->dict && - PyDict_GetItem(tstate->dict, self->key)) + PyDict_GetItem(tstate->dict, self->key)) { PyDict_DelItem(tstate->dict, self->key); + /* the list of threads could have been altered, restart from + * the head */ + tstate = PyInterpreterState_ThreadHead(interp); + } else { + tstate = PyThreadState_Next(tstate); + } } } return 0;