qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jiri Daněk (JIRA) <j...@apache.org>
Subject [jira] [Created] (PROTON-1631) [cpp] Stopping container in on_container_start after opening a socket will hang with libuv io
Date Fri, 13 Oct 2017 15:24:00 GMT
Jiri Daněk created PROTON-1631:
----------------------------------

             Summary: [cpp] Stopping container in on_container_start after opening a socket
will hang with libuv io
                 Key: PROTON-1631
                 URL: https://issues.apache.org/jira/browse/PROTON-1631
             Project: Qpid Proton
          Issue Type: Improvement
          Components: cpp-binding
    Affects Versions: proton-c-0.18.0
         Environment: Linux, libuv-1.14.1, git tip at commit 72b7ea0508e94aae3e5d9470293bc5c7e8250a45
(upstream/master) PROTON-1592 : [python] restore original tx_recv.py example
            Reporter: Jiri Daněk
            Assignee: Cliff Jansen


Make yourself a libuv build with

{noformat}
cmake .. -DBUILD_GO=OFF -DCMAKE_BUILD_TYPE=Release -GNinja -DPROACTOR=libuv
{noformat}

Run the following test

{noformat}
struct less_immediate_stop_tester : public proton::messaging_handler {
    listen_port port;
    proton::listener listener;
    bool done;
    int scheduled_work;

    less_immediate_stop_tester() : done(false), scheduled_work(0) {}

    void connect(proton::container* c) {
    }

    void on_container_start(proton::container& c) PN_CPP_OVERRIDE {
        listener = c.listen(port.url());
        c.connect(port.url("localhost"));
        c.stop();
    }
};

// FIXME: this test has some Invalid reads in Valgrind  // with t.listener.stop() line commented
out it doesn't
int test_container_less_immediate_stop() {
    less_immediate_stop_tester t;
    proton::container c(t);
    c.run();
//    t.listener.stop(); // saw this done in another test...
    return 0;
}
{noformat}

It will hang with the following output

{nofornat}
ninja && PN_TRACE_FRM=1 proton-c/bindings/cpp/container_test && echo pass
[...]
TEST: test_container_less_immediate_stop() 
[0x17cc4c0]:  -> AMQP 
[0x17cc4c0]:0 -> @open(16) [container-id="e038fe4b-9996-4874-be7d-50274e1e193e", hostname="localhost",
channel-max=32767] 
[0x17c9110]:  <- AMQP 
[0x17c9110]:0 <- @open(16) [container-id="e038fe4b-9996-4874-be7d-50274e1e193e", hostname="localhost",
channel-max=32767] 
[0x17c9110]:  -> AMQP 
[0x17c9110]:0 -> @open(16) [container-id="e038fe4b-9996-4874-be7d-50274e1e193e", channel-max=32767]

[0x17cc4c0]:  <- AMQP 
[0x17cc4c0]:0 <- @open(16) [container-id="e038fe4b-9996-4874-be7d-50274e1e193e", channel-max=32767]

{nofornat}

Now, this exact code does _not_ hang with epoll io.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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


Mime
View raw message