[ 
https://issues.apache.org/jira/browse/PROTON-1999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16759664#comment-16759664
 ] 

Cliff Jansen commented on PROTON-1999:
--------------------------------------

Olivier Delbeke: the mapping mechanism between Proton-C objects and the extra 
state in their C++ counterparts is not thread safe (pn_XXX_attachments()).

Perhaps that's an implementation detail that could be changed, but the current 
C++ philosophy is to superimpose a minimal additional locking on top of the 
Proton-C threading model.  We try to piggy-back naturally on where threading is 
safe or unsafe in Proton-C with the addition of (rare) extra locking: on the 
work_queue.add() and methods on proton::container.

> [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

Reply via email to