[
https://issues.apache.org/jira/browse/PROTON-1615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16739208#comment-16739208
]
Jeremy commented on PROTON-1615:
--------------------------------
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: [email protected]
For additional commands, e-mail: [email protected]