Thanks a lot Robbie for your response!

I will fix it by implementing a queue between my application thread and
container thread, so that we call send from the container thread only.

Best regards,
Arun

On Wed, Apr 12, 2023 at 5:06 PM Robbie Gemmell <robbie.gemm...@gmail.com>
wrote:

> To my C++ oblivious eyesight it sounds likely, and looks from the
> stack, that you are directly calling send with your own application
> thread. This isnt valid use of the sender, leading to unsafe
> multithreading...the connection and children are not thread safe and
> must only be used on the container thread handling that connections
> callbacks (often just a sole container thread used for all connections
> on the container).
>
> For more discussion and examples of how to coordinate with other
> application threads, see
>
> https://qpid.apache.org/releases/qpid-proton-0.38.0/proton/cpp/api/mt_page.html
>
> On Wed, 12 Apr 2023 at 11:49, Arun Koshal <akosha...@gmail.com> wrote:
> >
> > Hi,
> >
> > We are using Apache Qpid Proton C++ library version 0.37 for posting logs
> > to Azure eventhub in my application. Recently we have seen some crashes
> in
> > the field which point to the pn_class_incref() function in Apache Qpid
> > Proton library. We could not get the Core dump file but we have got the
> > call stack which looks like below:
> >
> > 0# switch_signal_handler(int) in ./Switch
> > 1# 0x00007F6A401CD520 in /lib/x86_64-linux-gnu/libc.so.6
> > 2# pn_class_incref in /lib/libqpid-proton-core.so.10
> > 3# pn_class_incref in /lib/libqpid-proton-core.so.10
> > 4# proton::sender::send(proton::message const&, proton::binary const&) in
> > /lib/libqpid-proton-cpp.so.12
> > 5# proton::sender::send(proton::message const&) in
> > /lib/libqpid-proton-cpp.so.12
> > 6# LogUploaderClient::post_log_to_eventhub(char const*) in ./Switch
> > 7# LogUploaderClient::process_new_log(char*) in ./Switch
> > 8# LogUploaderClient::log_uploader_thread() in ./Switch
> > 9# 0x00007F6A4048F2B3 in /lib/x86_64-linux-gnu/libstdc++.so.6
> > 10# 0x00007F6A4021FB43 in /lib/x86_64-linux-gnu/libc.so.6
> > 11# 0x00007F6A402B1A00 in /lib/x86_64-linux-gnu/libc.so.6
> >
> > Please find below the implementation of the send method in application:
> >         bool send(std::string msg)
> >         {
> >             if ((msg.size() > 0) && (sendable_) && (sender_.credit() >
> 0))
> >             {
> >                 proton::binary bodyBinary(msg.begin(), msg.end());
> >                 proton::message m;
> >                 m.body(bodyBinary);
> >                 m.inferred(true);
> >                 sender_.send(m);
> >                 messages_sent_++;
> >                 return true;
> >             }
> >
> >             return false;
> >         }
> >
> > Please note that sender_ is an object of proton::sender class.
> > Please find below the implementation of post_log_to_eventhub() method
> which
> > invokes this send method:
> >
> > void LogUploaderClient::post_log_to_eventhub(const char* buf)
> > {
> >     if (log_eventhub_sender_)
> >     {
> >         const int32_t max_retries { 15 };
> >         const int32_t duration { 1 }; //second
> >         int32_t retry { 0 };
> >
> >         while (!log_eventhub_sender_->ready())
> >         {
> >             retry++;
> >             if (retry > max_retries)
> >                 break;
> >             usleep(duration * 1000 * 1000);
> >         }
> >
> >         if (log_eventhub_sender_->ready())
> >         {
> >             log_eventhub_sender_->send(buf);
> >         }
> >     }
> > }
> >
> > Unfortunately, we do not see this type of exception in our local lab
> > environment but it has been observed quite consistently in the field.
> >
> > Any clue or help to diagnose and resolve this problem would really be
> > great. Please note that we have this signal handler
> (switch_signal_handler
> > function) registered for SIGINT, SIGSEGV and SIGABRT.
> >
> > Thank you so much!
> >
> > Best regards,
> > Arun
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> For additional commands, e-mail: users-h...@qpid.apache.org
>
>

Reply via email to