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

Jeremy edited comment on PROTON-1615 at 1/10/19 8:54 AM:
---------------------------------------------------------

Hello [~aconway]
 A further analysis of the hello world example that throws showed that if in 
cpp/src/proactor_container_impl.cpp:716 (container::impl::thread()), we do 
pn_proactor_wait(proactor_) in case of an error (just before finished = true; 
), the memory is properly freed. That being said, we don't think it is the 
correct approach. We need to have a mechanism that is not error prone, based on 
RAII.


was (Author: jeremy.aouad):
Hello [~aconway]
A further analysis of the hello world example that throws showed that if in 
`cpp/src/proactor_container_impl.cpp:716` (`container::impl::thread()`), we do 
`pn_proactor_wait(proactor_)` in case of an error (just before `finished = 
true;`), the memory is properly freed. That being said, we don't think it is 
the correct approach. We need to have a mechanism that is not error prone, 
based on RAII.

> c++: container leaks if exception thrown by handler.
> ----------------------------------------------------
>
>                 Key: PROTON-1615
>                 URL: https://issues.apache.org/jira/browse/PROTON-1615
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: cpp-binding
>            Reporter: Alan Conway
>            Assignee: Alan Conway
>            Priority: Major
>              Labels: leak
>
> An exception throw by a handler is re-thrown out of container.run() as 
> expected, however
> the container does not shut down cleanly and many leaks are reported by 
> valgrind or asan. The container should be exception-safe.
> To demonstrate the problem apply this small patch to the helloworld_direct 
> example.
> examples/cpp/helloworld_direct.cpp | 1 +
> modified   examples/cpp/helloworld_direct.cpp
> @@ -53,6 +53,7 @@ class hello_world_direct : public proton::messaging_handler 
> {
>  
>      // Receive one message and stop listener
>      void on_message(proton::delivery &, proton::message &m) OVERRIDE {
> +        throw std::runtime_error("thrown from on_message");
>          std::cout << m.body() << std::endl;
>          listener.stop();
>      }



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