[ https://issues.apache.org/jira/browse/PROTON-687?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14139399#comment-14139399 ]
Ken Giusti commented on PROTON-687: ----------------------------------- >From what I can tell, the engine decrements the delivery's reference count >when it is removed from the owning links' settled/unsettled delivery list - >but it never increments the delivery when it is initially put on the list. >This appears to be causing the corruption, at least for the above test. I've tried the following fix: diff --git a/proton-c/src/engine/engine.c b/proton-c/src/engine/engine.c index 0765a81..b7239d8 100644 --- a/proton-c/src/engine/engine.c +++ b/proton-c/src/engine/engine.c @@ -1123,6 +1123,7 @@ pn_delivery_t *pn_delivery(pn_link_t *link, pn_delivery_tag_t tag) delivery->updated = false; delivery->settled = false; LL_ADD(link, unsettled, delivery); + pn_incref(delivery); delivery->work_next = NULL; delivery->work_prev = NULL; delivery->work = false; This prevents the memory corruption, but it results in memory leaks in Messenger, and a failure in the delivery event tests: proton_tests.engine.EventTest.testDeliveryEvents ............................................................................................ fail Error during test: Traceback (most recent call last): File "./tests/python/proton-test", line 352, in run phase() File "/home/kgiusti/work/proton/qpid-proton/tests/python/proton_tests/engine.py", line 2219, in testDeliveryEvents Event.SESSION_FINAL, Event.CONNECTION_FINAL) File "/home/kgiusti/work/proton/qpid-proton/tests/python/proton_tests/engine.py", line 2087, in expect return self.expect_oneof(types) File "/home/kgiusti/work/proton/qpid-proton/tests/python/proton_tests/engine.py", line 2102, in expect_oneof assert False, "actual events %s did not match any of the expected sequences: %s" % (events, sequences) AssertionError: actual events [PN_CONNECTION_UNBOUND(<proton.Connection object at 0xba77ac0>), PN_TRANSPORT(<proton.Transport object at 0xc40d0c0>)] did not match any of the expected sequences: ((3, 23, 21, 14, 8),) I'm not sure I understand the intent of the reference counting in the case of deliveries - I'm turning this bug over to Rafi for his analysis. > Memory corruption in proton-test > -------------------------------- > > Key: PROTON-687 > URL: https://issues.apache.org/jira/browse/PROTON-687 > Project: Qpid Proton > Issue Type: Bug > Components: proton-c, python-binding > Affects Versions: 0.8 > Reporter: Cliff Jansen > Assignee: Ken Giusti > Priority: Blocker > Attachments: segv.patch > > > proton-test will fail with memory violations. Deallocated memory is > accessed, usually with benign results but less often on Windows. > The attached crude patch allows the bug to be "discovered" on Linux as well. > It is not clear to me if the problem is with the swig wrapper, or whether > this just exposes a reference counting bug in proton-c. -- This message was sent by Atlassian JIRA (v6.3.4#6332)