Comparison with False - something I don't understand
MRAB
python at mrabarnett.plus.com
Thu Dec 2 14:54:33 EST 2010
On 02/12/2010 19:15, Tim Harig wrote:
> On 2010-12-02, Paul Rubin<no.email at nospam.invalid> wrote:
>> Tim Harig<usernet at ilthio.net> writes:
>>>> longjmp. Alternatively you can have an auxiliary stack of cleanup
>>>> records that the longjmp handler walks through. Of course if you do
>>>
>>> Only if you already have pointers to *all* of the data structures at
>>> the point where you put your setjmp().
>>
>> The setjmp point only has to know where the aux stack is and its depth
>> when the longjmp happens. The cleanup records contain any necessary
>> pointers to data structures that need freeing. That is basically how
>> try/finally would do it too. This is pretty standard stuff.
>
> I am not talking about what setjmp() has to do, I am talking about what
> *you* have to do after setjmp() returns. If you have allocated memory in
> intermediate functions and you don't have a reference to them outside of
> the functions that longjmp() bypasses from returning properly (and thus
> either not clearning data structures or returning a reference to those data
> structures as it normally would) then you have potential memory leaks,
> dangling pointers, etc.
>
> I am not saying that this cannot be done. What I am saying is that it
> is inherently error prone.
Automatic garbage collection is nice to have when using exceptions
precisely because it's automatic, so unwinding the stack is much safer.
More information about the Python-list
mailing list