QAmqpClient: Use QPointer to store exchanges and queues.

Just discovered you *CAN* delete them yourself safely, and one of the
tests does.  So best to not assume they'll get deleted by other parties.

QPointer takes care of this problem for us.
This commit is contained in:
Stuart Longland 2015-04-08 10:14:13 +10:00
parent ae77ff56e0
commit fd4eaef364
2 changed files with 8 additions and 6 deletions

View File

@ -660,8 +660,9 @@ QAmqpExchange *QAmqpClient::createExchange(int channelNumber)
QAmqpExchange *QAmqpClient::createExchange(const QString &name, int channelNumber)
{
Q_D(QAmqpClient);
if (!name.isEmpty() && d->exchanges.contains(name))
return d->exchanges[name];
if (!name.isEmpty() && d->exchanges.contains(name)
&& (!d->exchanges[name].isNull()))
return d->exchanges[name].data();
QAmqpExchange *exchange = new QAmqpExchange(channelNumber, this);
d->methodHandlersByChannel[exchange->channelNumber()].append(exchange->d_func());
@ -684,8 +685,9 @@ QAmqpQueue *QAmqpClient::createQueue(int channelNumber)
QAmqpQueue *QAmqpClient::createQueue(const QString &name, int channelNumber)
{
Q_D(QAmqpClient);
if (!name.isEmpty() && d->queues.contains(name))
return d->queues[name];
if (!name.isEmpty() && d->queues.contains(name)
&& (!d->queues[name].isNull()))
return d->queues[name].data();
QAmqpQueue *queue = new QAmqpQueue(channelNumber, this);
d->methodHandlersByChannel[queue->channelNumber()].append(queue->d_func());

View File

@ -101,10 +101,10 @@ public:
QString errorString;
/*! Exchange objects */
QHash<QString, QAmqpExchange*> exchanges;
QHash<QString, QPointer<QAmqpExchange> > exchanges;
/*! Named queue objects */
QHash<QString, QAmqpQueue*> queues;
QHash<QString, QPointer<QAmqpQueue> > queues;
QAmqpClient * const q_ptr;
Q_DECLARE_PUBLIC(QAmqpClient)