qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gordon Sim <g...@redhat.com>
Subject Re: [Client] warning Session was not closed cleanly
Date Thu, 16 Jan 2014 10:20:35 GMT
On 01/16/2014 02:04 AM, Xiong Zou wrote:
> Hi All,
>
> I am experimenting qpid Pub-Sub pattern, referring to
> examples/old_api/pub-sub sample codes. My qpid version is 0.20.

I would strongly advise you to switch to the qpid::messaging API[1] if 
at all possible. The qpid::client API has been removed in the latest 
versions of Qpid. Further comments on the code inline.

[1] http://qpid.apache.org/releases/qpid-0.24/programming/book/index.html

> Sometimes I received warning message like below sample: when I stop my
> binary:
> 2014-01-16 08:58:33 [Client] warning Session was not closed cleanly:
> anonymous.fa805922-8f1b-4e67-9710-a3da31e9bfc8
[...]
>          void CListener::stop()
>          {
>                  //No need to cancel subscriptions with
> m_subscriptions.stop().
>                  //for(unsigned int i; i < m_vecQueueUIDs.size(); i++)
>                  //{
>                  //      if(!m_vecQueueUIDs[i].empty())
>                  //              m_subscriptions.cancel(m_vecQueueUIDs[i]);
>                  //}
>                  // stop the spawned thread
>                  m_subscriptions.stop();

Add

    m_subscriptions.wait();

to wait for the thread to actually exit here. I would personally advise 
you to start your own thread and call m_subscriptions.run() on it, as 
the start()/stop() method doesn't handle exceptions occurring on 
dispatch well.

>          }
>
> };

[...]

> IPC::CQPIDPubSubAdaptor::~CQPIDPubSubAdaptor()
> {
>          INFO << "start to clear up QPIDPubSubAdaptor" << ENDL;
>          if(m_pConListner)
>          {
>                  CListener* pListner = (CListener*)m_pConListner;
>                  pListner->stop();
>                  //delete pListner;     //cannot delete listner, will cause
> ~Mutex() to signal
>                  m_pConListner = NULL;
>          }
>

Do an explicit m_session.close() here as well. If you want to be extr 
safe to an explicit m_session.sync() before that to ensure all inflight 
operations are complete.

>          m_connection.close();
>
>          if(m_pSession)
>          {
>                  delete m_pSession;
>                  m_pSession = NULL;
>          }
>
>          if(m_pHelpQueue)
>          {
>                  delete m_pHelpQueue;
>                  m_pHelpQueue = NULL;
>          }
> }


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


Mime
View raw message