You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Francesco Raviglione <fr...@gmail.com> on 2020/03/25 18:11:46 UTC

Starting the Qpid Proton C++ event loop inside a pthread callback function

Dear all,
I tried starting the Qpid Proton C++ even loop inside a thread, created
with "pthread_create()", while experimenting with the library.
However, I'm always getting a non-working code, which often causes some
weird behavior.
In particular, I tried creating an example by modifying the
"helloworld.cpp" sample code.

The modified code can be found here: https://pastebin.com/a6XLJF9k

When launching "proton::container(hw).run();" inside a normal function
(i.e. "pthread_callback(NULL)" in the code reported above), which is in
turn called from main(), everything works fine and I get the following
output:

$ ./helloworld
c1 - URL: //127.0.0.1:5672 - QUEUE NAME: examples
on_container_start
on_sendable
Hello World!

If, instead, I launch it inside a pthread callback, after creating a new
thread with "pthread_create()", the AMQP connection with the broker is
never established, and, when calling my executable multiple times, I even
get different outputs:
$ ./helloworld -> no output, no connection
$ ./helloworld
c1 - URL: 0.1:5672 - QUEUE NAME: examples -> one normal print, URL string
corrupted, no AMQP connection ("on_container_start" is never printed out)
$ ./helloworld -> no output, no connection
$ ./helloworld
c1 c1 - URL: 0.1:5672 - QUEUE NAME: examples -> URL string corrupted, "c1"
printed two times (?)
$ ./helloworld
c1 - URL: 0.1:5672 - QUEUE NAME: examples -> URL string corrupted, no AMQP
connection ("on_container_start" is never printed out)
$ ./helloworld
c1 - URL: 0.1:5672 - QUEUE NAME: examples -> URL string corrupted, no AMQP
connection ("on_container_start" is never printed out)
$ ./helloworld
c1 - URL: 0.1:5672 - QUEUE NAME: examples -> URL string corrupted, no AMQP
connection ("on_container_start" is never printed out)

I know that there are other better ways to create multithreaded Qpid Proton
clients, but do you know why I'm observing such a strange behavior, which
seem to be due to some data corruption, while there is only a single
connection to the AMQP broker (in my case, an Apache ActiveMQ 5 broker)?

Thank you very much in advance for your assistance!