-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/17125/
-----------------------------------------------------------

Review request for qpid, Gordon Sim and Rafael Schloming.


Bugs: proton-487
    https://issues.apache.org/jira/browse/proton-487


Repository: qpid


Description
-------

Work in progress - wanted feedback before I implement tests.

This change introduces "free" methods to the classes which are not currently 
being garbage collected - I chose the name as it corresponds to the C API.

I've made a kinda/sorta hacky approach here - wanted some feedback on it:

You'll see that the "free()" call doesn't immediately release the C object (eg, 
call pn_link_free(), for example).  I've left that call in the object's __del__ 
method.

Why?  Because if the app does this:

my_session.free(); my_link.free()

Which really is backwards - IMHO - we get a seg-fault.   The problem is that 
having free() immediately free the parent causes the C library to directly free 
all the children.  This causes the Python child (my_link, in above) to have a 
'dangling' reference to the now-freed C link.  Since there is no indication 
from the C library that the link is gone, the python side really can't clean it 
up.

So to get around that I delayed the pn_xxx_free() call to the __del__ method, 
and kept "parent references" in each child that prevents the parent from being 
__del__ until the child is released.

Thoughts?


Diffs
-----

  /proton/trunk/proton-c/bindings/python/proton.py 1554940 
  /proton/trunk/tests/python/proton_tests/engine.py 1554940 

Diff: https://reviews.apache.org/r/17125/diff/


Testing
-------

by hand only.


Thanks,

Kenneth Giusti

Reply via email to