[ https://issues.apache.org/jira/browse/PROTON-1999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16755400#comment-16755400 ]
Cliff Jansen commented on PROTON-1999: -------------------------------------- In example2.cpp sender.work_queue() is not thread safe, hence send_message() is not. Take a look at the examples where a pointer to the work_queue is carefully managed: NULL on init, set from within the handler callback, and your send_message() would use: my_work_queue_ptr_->add( the_work ); Please give that a try and report back. > [c] Crash in pn_connection_finalize > ----------------------------------- > > Key: PROTON-1999 > URL: https://issues.apache.org/jira/browse/PROTON-1999 > Project: Qpid Proton > Issue Type: Bug > Components: cpp-binding, proton-c > Affects Versions: proton-c-0.26.0 > Environment: Linux 64-bits (Ubuntu 16.04 and Oracle Linux 7.4) > Reporter: Olivier Delbeke > Assignee: Cliff Jansen > Priority: Major > Attachments: call_stack.txt, example2.cpp, log.txt, main.cpp, > run_qpid-broker.sh > > > Here is my situation : I have several proton::containers (~20). > Each one has its own proton::messaging_handler, and handles one > proton::connection to a local qpid-broker (everything runs on the same Linux > machine). > 20 x ( one container with one handler with one connection with one link) > Some containers/connections/handlers work in send mode ; they have one link > that is a proton::sender. > Some containers/connections/handlers work in receive mode ; they have one > link that is a proton::receiver. Each time they receive an input message, > they do some processing on it, and finally add a "sender->send()" task to the > work queue of some sender handlers ( by calling work_queue()->add( [=] \{ > sender->send(msg); } as shown in the multi-threading examples). > This works fine for some time (tens of thousands of messages, several minutes > or hours), but eventually crashes, either with a SEGFAULT (when the > qpid-proton lib is compiled in release mode) or with an assert (in debug > mode), in qpid-proton/c/src/core/engine.c line 483, > assert(!conn->transport->referenced) in function pn_connection_finalize(). > The proton logs (activated with export PN_TRACE_FRM=1) do not show anything > abnormal (no loss of connection, no rejection of messages, no timeouts, ...). > As the connection is not closed, I wonder why pn_connection_finalize() would > be called in the first place. > I joined the logs and the call trace. > Happens on 0.26.0 but also reproduced with the latest master (Jan 28, 2019). > > -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org