qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "chao fan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PROTON-1734) [cpp] container.stop() doesn't work when called from non-proactor thread.
Date Thu, 01 Feb 2018 03:41:00 GMT

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

chao fan commented on PROTON-1734:
----------------------------------

I also encountered this issue.

I use proton on Windows by VS2017. If not any receiver or sender is used which is that none
connection is opened, stopping container will not work and it hangs in _GetQueuedCompletionStatus_.

I checked the function stop() and did not find any action to wakeup _GetQueuedCompletionStatus_.

_void container::impl::stop(const proton::error_condition& err) {_
 _GUARD(lock_);_
 _auto_stop_ = true;_
 _stopping_ = true;_
 _pn_condition_t* error_condition = pn_condition();_
 _set_error_condition(err, error_condition);_
 _pn_proactor_disconnect(proactor_, error_condition);_
 _pn_condition_free(error_condition);_
_}_

 

> [cpp] container.stop() doesn't work when called from non-proactor thread.
> -------------------------------------------------------------------------
>
>                 Key: PROTON-1734
>                 URL: https://issues.apache.org/jira/browse/PROTON-1734
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: cpp-binding
>    Affects Versions: proton-c-0.19.0
>            Reporter: Alan Conway
>            Assignee: Andrew Stitcher
>            Priority: Major
>             Fix For: proton-c-0.21.0
>
>
> Using the below code
> {code}
> #include <proton/container.hpp>
> #include <iostream>
> #include <thread>
> int main( int, char** )
> {
>   try
>   {
>     proton::container c;
>     c.auto_stop( false );
>     auto containerThread = std::thread([&]() { std::cout << "CONTAINER IS RUNNING"
<< std::endl; 
>                                                                                     
     c.run(); std::cout << "CONTAINER IS DONE" << std::endl; });
>     std::this_thread::sleep_for( std::chrono::seconds( 2 ));
>     std::cout << "STOPPING CONTAINER" << std::endl;
>     c.stop();
>     std::cout << "WAITING FOR CONTAINER" << std::endl;
>     containerThread.join();
>     return 0;
>   }
>   catch( std::exception& e )
>   {
>     std::cerr << e.what() << std::endl;
>   }
>   return 1;
> }
> {code}
> via
> {code}
> [rkieley@i7t450s build]$ g++ -g -Wall -Wextra -Wpointer-arith -Wconversion -Wformat -Wformat-security
-Wformat-y2k -Wsign-promo -Wcast-qual -g3 -ggdb3 -Wunused-variable -fno-eliminate-unused-debug-types
-O3 -DNDEBUG -fPIC -DPN_CPP_HAS_LAMBDAS=0  -std=gnu++11  ../attachments/test.cpp -lqpid-proton-cpp
-lqpid-proton-core -lqpid-proton-proactor -lrt -lpthread -o test
> {code}
> With both PROACTOR epoll and libuv I see the following when run:
> {quote}
> [New Thread 0x7ffff3c95700 (LWP 20312)]
> CONTAINER IS RUNNING
> STOPPING CONTAINER
> WAITING FOR CONTAINER
> ^C
> Thread 1 "test" received signal SIGINT, Interrupt.
> {quote}
> When I use CTRL-C to stop waiting after running via gdb and waiting 2 minutes.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message