[Neal] >> ... >> I'm concerned about the negative ref leak in test_contextlib. I >> wonder if this was a result of PJE's fix for generators? [Tim] > I don't know, but if you do > > while 1: > test_contextlib.test_main() > gc.collect() > > under a debug build it eventually (> 500 iterations) crashes with > > Fatal Python error: deallocating None > ... OK, I fixed that (incorrect decref in gen_throw()). Neal, that should also repair test_contextlib's ref leak oddities. The reason you didn't see this before is that test_contextlib didn't actually run any tests until recently. Phillip, when eyeballing gen_dealloc(), I didn't understand two things: 1. Why doesn't if (gen->gi_frame->f_stacktop!=NULL) { check first to be sure that gen->gi_frame != Py_None? Is that impossible here for some reason? 2. It _looks_ like "gi_frame != NULL" is an (undocumented) invariant. Right? If so, Py_XDECREF(gen->gi_frame); sends a confusing message (because of the "X", implying that NULL is OK). Regardless, it would be good to add comments to genobject.h explaining the possible values gi_frame can hold. For example, what does it mean when gi_frame is Py_None? Can it ever be NULL? It's very hard to reverse- engineer invariants and "special value" intents from staring at code. Not to say that isn't fun ;-)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4