[Python-Dev] Preserving the blamelist

Tim Peters tim.peters at gmail.com
Wed Apr 12 09:00:11 CEST 2006


[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 ;-)


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /