[Python-Dev] Crash in new "trashcan" mechanism.

Christian Tismer tismer@tismer.com
Tue, 11 Apr 2000 18:57:09 +0200


Vladimir Marangozov wrote:
> 
> Christian Tismer wrote:
> >
> > About extensions and Trashcan.
> > ...
> > Or, I made a mistake in this little code:

> Maybe unrelated, but this code does not handle the case when
> PyList_Append fails. If it fails, the object needs to be deallocated
> as usual. Looking at the macros, I don't see how you can do that
> because Py_TRASHCAN_SAFE_END, which calls the above function,
> occurs after the finalization code...

Yes, it does not handle this case for the following reasons:

Reason 1)
If the append does not work, then the system is apparently
in a incredibly bad state, most probably broken!
Note that these actions only take place when we have a
recursion depth of 50 or so. That means, we already freed
some memory, and now we have trouble with this probably
little list. I won't touch a broken memory management.

Reason 2)
If the append does not work, then we are not allowed to
deallocate the element at all. Trashcan was written in
order to avoid crashes for too deeply nested objects.
The current nesting level of 20 or 50 is of course
very low, but generally I would assume that the limit
is choosen for good reasons, and any deeper recursion
might cause a machine crash. Under this assumption,
the only thing you can do is to forget about the object.

Remark ad 1):
I had once changed the strategy to use a tuple construct instead.
Thinking of memory problems when the shredder list must be
grown, this could give an advantage. The optimum would be
if the destructor data structure is never bigger than the
smallest nested object. This would even allow me to recycle
these for the destruction, without any malloc at all.

ciao - chris

-- 
Christian Tismer             :^)   <mailto:tismer@appliedbiometrics.com>
Applied Biometrics GmbH      :     Have a break! Take a ride on Python's
Kaunstr. 26                  :    *Starship* http://starship.python.net
14163 Berlin                 :     PGP key -> http://wwwkeys.pgp.net
PGP Fingerprint       E182 71C7 1A9D 66E9 9D15  D3CC D4D7 93E2 1FAE F6DF
     where do you want to jump today?   http://www.stackless.com