qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From CLIVE <cl...@ckjltd.co.uk>
Subject qpid::messaging::Sender::getUnsettled causes segmentation fault
Date Mon, 16 Jun 2014 11:51:27 GMT
Hi,

Encountered a condition that causes a certain usage of the 
qpid::messaging API to segmentation fault.

The following code will cause the failure (QpidBroker is just a class 
that starts and stops a QPID broker)

      QpidBroker broker;
      broker.start(5);

      qpid::messaging::Connection connection("localhost","");
      connection.open();

      qpid::messaging::Session  session  = connection.createSession();
      qpid::messaging::Sender   sender   = 
session.createSender("amq.topic/fred");

      sender.setCapacity(100);

      // Stop the broker to simulate a broker/network failure,
      broker.stop(2);

      // Send messages, but do not send more than
      // capacity/4 as this causes a flush in the
      // sender implementation.
      for(uint32_t x=0; x < 10; ++x){
         qpid::messaging::Message message;
         message.setContent(content + " : " + 
boost::lexical_cast<std::string>(x));
         try {
             sender.send(message,false);
         }
         catch(const qpid::types::Exception& qme){
              // EACH 'send' INVOCATION WILL CAUSE AN EXCEPTION REPORTING
              // NO CONNECTION. BUT MESSAGE WILL BE STORED IN THE SENDERS
              // OUTGOING QUEUE (ASSUMING THE SENDERS FLUSH MECHANISM
              // HASN'T BEEN ACTIVATED).
              //
              // IF THE OUTGOING QUEUE OF THE SENDER IMPLEMENTATION
              // IS NON-ZERO A CALL TO 'getUnsettled' WILL CAUSE A 
SEGMENTATION
              // FAULT.
              sender.getUnsettled();
         }
       }

Stack trace is:

#0  0x00007f7051c2dcc6 in 
boost::shared_ptr<qpid::client::SessionImpl>::operator*() const ()  from 
libqpidclient.so.2
#1  0x00007f7051c2dbc0 in qpid::client::CompletionImpl::isComplete() () 
from libqpidclient.so.2
#2  0x00007f7051c2d91d in qpid::client::Completion::isComplete() () from 
libqpidclient.so.2
#3  0x00007f70521a551f in 
qpid::client::amqp0_10::SenderImpl::checkPendingSends(bool, 
qpid::sys::ScopedLock<qpid::sys::Mutex> const&) () from 
libqpidmessaging.so.2
#4  0x00007f70521a544b in 
qpid::client::amqp0_10::SenderImpl::checkPendingSends(bool) () from 
/libqpidmessaging.so.2
#5  0x00007f70521a5a8c in 
qpid::client::amqp0_10::SenderImpl::CheckPendingSends::operator()() () 
from libqpidmessaging.so.2
#6  0x00007f70521a6bbd in bool 
qpid::client::amqp0_10::SessionImpl::execute<qpid::client::amqp0_10::SenderImpl::CheckPendingSends

(qpid::client::amqp0_10::SenderImpl::CheckPendingSends&) () from 
libqpidmessaging.so.2
#7  0x00007f70521a4d05 in 
qpid::client::amqp0_10::SenderImpl::getUnsettled() () from 
libqpidmessaging.so.2
#8  0x00007f70521b9347 in qpid::messaging::Sender::getUnsettled() () 
from/libqpidmessaging.so.2

Should I create a JIRA?

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


Mime
View raw message