fix memory leak on SSL failure. Add leak checking in unit tests.
This commit is contained in:
parent
367bbe4b65
commit
5969fe83c8
@ -172,13 +172,18 @@ class Connection(Endpoint):
|
||||
self._user_context = None
|
||||
self._in_process = False
|
||||
self._remote_session_id = 0
|
||||
|
||||
self._pn_ssl = self._configure_ssl(properties)
|
||||
|
||||
# TODO(kgiusti) sasl configuration and handling
|
||||
self._pn_sasl = None
|
||||
self._sasl_done = False
|
||||
|
||||
# intercept any SSL failures and cleanup resources before propagating
|
||||
# the exception:
|
||||
try:
|
||||
self._pn_ssl = self._configure_ssl(properties)
|
||||
except:
|
||||
self.destroy()
|
||||
raise
|
||||
|
||||
@property
|
||||
def container(self):
|
||||
return self._container
|
||||
|
@ -17,6 +17,7 @@
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import gc
|
||||
import time
|
||||
|
||||
import pyngus
|
||||
@ -38,10 +39,13 @@ class Test(object):
|
||||
return self.config.defines.get(name, default)
|
||||
|
||||
def setup(self):
|
||||
pass
|
||||
gc.enable()
|
||||
gc.collect()
|
||||
assert not gc.garbage, "Object leak: %s" % str(gc.garbage)
|
||||
|
||||
def teardown(self):
|
||||
pass
|
||||
gc.collect()
|
||||
assert not gc.garbage, "Object leak: %s" % str(gc.garbage)
|
||||
|
||||
@property
|
||||
def delay(self):
|
||||
|
@ -30,6 +30,7 @@ import pyngus
|
||||
class APITest(common.Test):
|
||||
|
||||
def setup(self):
|
||||
super(APITest, self).setup()
|
||||
# logging.getLogger("pyngus").setLevel(logging.DEBUG)
|
||||
self.container1 = pyngus.Container("test-container-1")
|
||||
self.container2 = pyngus.Container("test-container-2")
|
||||
@ -39,6 +40,7 @@ class APITest(common.Test):
|
||||
self.container1.destroy()
|
||||
if self.container2:
|
||||
self.container2.destroy()
|
||||
super(APITest, self).teardown()
|
||||
|
||||
def test_create_destroy(self):
|
||||
"""Verify Connection construction/destruction."""
|
||||
|
@ -25,11 +25,17 @@ import pyngus
|
||||
class APITest(common.Test):
|
||||
|
||||
def test_create_destroy(self):
|
||||
gc.enable()
|
||||
gc.collect()
|
||||
assert not gc.garbage, "Object leak: %s" % str(gc.garbage)
|
||||
container = pyngus.Container("My-Container")
|
||||
assert container.name == "My-Container"
|
||||
container.destroy()
|
||||
|
||||
def test_create_connection(self):
|
||||
gc.enable()
|
||||
gc.collect()
|
||||
assert not gc.garbage, "Object leak: %s" % str(gc.garbage)
|
||||
container = pyngus.Container("A123")
|
||||
container.create_connection("c1")
|
||||
container.create_connection("c2")
|
||||
@ -42,6 +48,8 @@ class APITest(common.Test):
|
||||
|
||||
def test_cleanup(self):
|
||||
gc.enable()
|
||||
gc.collect()
|
||||
assert not gc.garbage, "Object leak: %s" % str(gc.garbage)
|
||||
container = pyngus.Container("abc")
|
||||
c1 = container.create_connection("c1")
|
||||
c2 = container.create_connection("c2")
|
||||
@ -62,6 +70,9 @@ class APITest(common.Test):
|
||||
assert not gc.garbage, "Object leak: %s" % str(gc.garbage)
|
||||
|
||||
def test_need_processing(self):
|
||||
gc.enable()
|
||||
gc.collect()
|
||||
assert not gc.garbage, "Object leak: %s" % str(gc.garbage)
|
||||
container = pyngus.Container("abc")
|
||||
c1 = container.create_connection("c1")
|
||||
c2 = container.create_connection("c2")
|
||||
|
@ -30,6 +30,7 @@ import pyngus
|
||||
class APITest(common.Test):
|
||||
|
||||
def setup(self, conn1_props=None, conn2_props=None):
|
||||
super(APITest, self).setup()
|
||||
# logging.getLogger("pyngus").setLevel(logging.DEBUG)
|
||||
self.container1 = pyngus.Container("test-container-1")
|
||||
self.conn1_handler = common.ConnCallback()
|
||||
@ -60,6 +61,7 @@ class APITest(common.Test):
|
||||
self.conn2.destroy()
|
||||
if self.container2:
|
||||
self.container2.destroy()
|
||||
super(APITest, self).teardown()
|
||||
|
||||
def _setup_sender_sync(self):
|
||||
"""Create links, initiated by sender."""
|
||||
@ -456,6 +458,7 @@ class APITest(common.Test):
|
||||
def test_send_deadline_idle(self):
|
||||
"""Validate the connection's deadline processing."""
|
||||
|
||||
self.teardown()
|
||||
self.setup(conn1_props={"idle-time-out": 99})
|
||||
|
||||
sender1 = self.conn1.create_sender("src1", "tgt1")
|
||||
@ -556,6 +559,7 @@ class APITest(common.Test):
|
||||
def test_multi_frame_message(self):
|
||||
"""Verify multi-frame message send/receive."""
|
||||
|
||||
self.teardown()
|
||||
props = {"max-frame-size": 512}
|
||||
self.setup(conn1_props=props, conn2_props=props)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user