[martin@v.loewis.de] > Notice, however, that the float object is not *directly* deallocated. > Instead, it is deallocated as a consequence of deallocating a > one-element tuple which is the argument tuple for "round", in > > PyObject *callargs; > callargs = load_args(pp_stack, na); > x = PyCFunction_Call(func, callargs, NULL); > Py_XDECREF(callargs); > > load_args copies the argument from the stack into the tuple, > transferring the refence. So apparently, the float const gets on the > stack without its reference being bumped... That was my excited guess, until I looked at LOAD_CONST <wink>. Calls are such an elaborate dance that the refcount on this puppy gets as high as 7. The problem actually occurred when the refcount was at its peak, due to an erroneous decref in handle_range_longs(). At that point the refcount fell to 6, and the remaining 6(!) decrefs all looked correct. > That's as far as I can get tonight. Thanks for sharing the pain!
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