You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2010/03/19 18:04:18 UTC
svn commit: r925332 - in /qpid/trunk/qpid/cpp: examples/messaging/
include/qpid/messaging/ src/qpid/client/amqp0_10/ src/tests/
Author: gsim
Date: Fri Mar 19 17:04:18 2010
New Revision: 925332
URL: http://svn.apache.org/viewvc?rev=925332&view=rev
Log:
QPID-664: Prevent dangling pointers when receiver/sender handles stay in scope after connection/session handles goes out of scope. This change require connections to be closed explicitly to avoid leaking memory.
Modified:
qpid/trunk/qpid/cpp/examples/messaging/client.cpp
qpid/trunk/qpid/cpp/examples/messaging/drain.cpp
qpid/trunk/qpid/cpp/examples/messaging/map_receiver.cpp
qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp
qpid/trunk/qpid/cpp/examples/messaging/queue_receiver.cpp
qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp
qpid/trunk/qpid/cpp/examples/messaging/server.cpp
qpid/trunk/qpid/cpp/examples/messaging/spout.cpp
qpid/trunk/qpid/cpp/examples/messaging/topic_receiver.cpp
qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp
qpid/trunk/qpid/cpp/include/qpid/messaging/Connection.h
qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h
qpid/trunk/qpid/cpp/src/tests/qpid_recv.cpp
qpid/trunk/qpid/cpp/src/tests/qpid_send.cpp
qpid/trunk/qpid/cpp/src/tests/qpid_stream.cpp
Modified: qpid/trunk/qpid/cpp/examples/messaging/client.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/client.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/client.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/client.cpp Fri Mar 19 17:04:18 2010
@@ -39,8 +39,8 @@ using std::string;
int main(int argc, char** argv) {
const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
@@ -70,6 +70,7 @@ int main(int argc, char** argv) {
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/examples/messaging/drain.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/drain.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/drain.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/drain.cpp Fri Mar 19 17:04:18 2010
@@ -93,8 +93,8 @@ int main(int argc, char** argv)
{
Options options(argv[0]);
if (options.parse(argc, argv)) {
+ Connection connection(options.connectionOptions);
try {
- Connection connection(options.connectionOptions);
connection.open(options.url);
Session session = connection.newSession();
Receiver receiver = session.createReceiver(options.address);
@@ -116,6 +116,7 @@ int main(int argc, char** argv)
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
}
return 1;
Modified: qpid/trunk/qpid/cpp/examples/messaging/map_receiver.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/map_receiver.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/map_receiver.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/map_receiver.cpp Fri Mar 19 17:04:18 2010
@@ -38,8 +38,8 @@ using std::string;
int main(int argc, char** argv) {
const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
Receiver receiver = session.createReceiver("message_queue");
@@ -52,6 +52,7 @@ int main(int argc, char** argv) {
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp Fri Mar 19 17:04:18 2010
@@ -37,9 +37,8 @@ using std::string;
int main(int argc, char** argv) {
const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
-
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
Sender sender = session.createSender("message_queue");
@@ -64,6 +63,7 @@ int main(int argc, char** argv) {
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/examples/messaging/queue_receiver.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/queue_receiver.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/queue_receiver.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/queue_receiver.cpp Fri Mar 19 17:04:18 2010
@@ -31,8 +31,8 @@ using namespace qpid::messaging;
int main(int argc, char** argv) {
const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
Receiver receiver = session.createReceiver("message_queue");
@@ -51,6 +51,7 @@ int main(int argc, char** argv) {
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp Fri Mar 19 17:04:18 2010
@@ -34,8 +34,8 @@ int main(int argc, char** argv) {
const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
int count = argc>2 ? atoi(argv[2]) : 10;
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
Sender sender = session.createSender("message_queue");
@@ -50,10 +50,10 @@ int main(int argc, char** argv) {
// And send a final message to indicate termination.
sender.send(Message("That's all, folks!"));
session.sync();
- connection.close();
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/examples/messaging/server.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/server.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/server.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/server.cpp Fri Mar 19 17:04:18 2010
@@ -41,8 +41,8 @@ using std::string;
int main(int argc, char** argv) {
const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
Receiver receiver = session.createReceiver("service_queue; {create: always}");
@@ -70,6 +70,7 @@ int main(int argc, char** argv) {
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/examples/messaging/spout.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/spout.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/spout.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/spout.cpp Fri Mar 19 17:04:18 2010
@@ -156,8 +156,8 @@ int main(int argc, char** argv)
{
Options options(argv[0]);
if (options.parse(argc, argv)) {
+ Connection connection(options.connectionOptions);
try {
- Connection connection(options.connectionOptions);
connection.open(options.url);
Session session = connection.newSession();
Sender sender = session.createSender(options.address);
@@ -183,6 +183,7 @@ int main(int argc, char** argv)
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
}
return 1;
Modified: qpid/trunk/qpid/cpp/examples/messaging/topic_receiver.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/topic_receiver.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/topic_receiver.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/topic_receiver.cpp Fri Mar 19 17:04:18 2010
@@ -34,8 +34,8 @@ int main(int argc, char** argv) {
const std::string url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
const std::string pattern = argc>2 ? argv[2] : "#.#";
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
Receiver receiver = session.createReceiver("news_service; {filter:[control, " + pattern + "]}");
@@ -53,6 +53,7 @@ int main(int argc, char** argv) {
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp Fri Mar 19 17:04:18 2010
@@ -51,8 +51,8 @@ int main(int argc, char** argv) {
const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
int count = argc>2 ? atoi(argv[2]) : 10;
+ Connection connection;
try {
- Connection connection;
connection.open(url);
Session session = connection.newSession();
Sender sender = session.createSender("news_service");
@@ -72,6 +72,7 @@ int main(int argc, char** argv) {
return 0;
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
return 1;
}
Modified: qpid/trunk/qpid/cpp/include/qpid/messaging/Connection.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/messaging/Connection.h?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/messaging/Connection.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/messaging/Connection.h Fri Mar 19 17:04:18 2010
@@ -80,6 +80,11 @@ class Connection : public qpid::messagin
QPID_CLIENT_EXTERN Connection& operator=(const Connection&);
QPID_CLIENT_EXTERN void setOption(const std::string& name, const Variant& value);
QPID_CLIENT_EXTERN void open(const std::string& url);
+ /**
+ * Closes a connection and all sessions associated with it. An
+ * opened connection must be closed before the last handle is
+ * allowed to go out of scope.
+ */
QPID_CLIENT_EXTERN void close();
QPID_CLIENT_EXTERN Session newSession(bool transactional, const std::string& name = std::string());
QPID_CLIENT_EXTERN Session newSession(const std::string& name = std::string());
Modified: qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h Fri Mar 19 17:04:18 2010
@@ -58,6 +58,12 @@ class Session : public qpid::messaging::
QPID_CLIENT_EXTERN ~Session();
QPID_CLIENT_EXTERN Session& operator=(const Session&);
+ /**
+ * Closes a session and all associated senders and receivers. An
+ * opened session should be closed before the last handle to it
+ * goes out of scope. All a connections sessions can be closed by
+ * a call to Connection::close().
+ */
QPID_CLIENT_EXTERN void close();
QPID_CLIENT_EXTERN void commit();
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp Fri Mar 19 17:04:18 2010
@@ -57,14 +57,14 @@ qpid::messaging::Message ReceiverImpl::f
bool ReceiverImpl::get(qpid::messaging::Message& message, qpid::messaging::Duration timeout)
{
Get f(*this, message, timeout);
- while (!parent.execute(f)) {}
+ while (!parent->execute(f)) {}
return f.result;
}
bool ReceiverImpl::fetch(qpid::messaging::Message& message, qpid::messaging::Duration timeout)
{
Fetch f(*this, message, timeout);
- while (!parent.execute(f)) {}
+ while (!parent->execute(f)) {}
return f.result;
}
@@ -112,7 +112,7 @@ void ReceiverImpl::init(qpid::client::As
}
if (state == CANCELLED) {
source->cancel(session, destination);
- parent.receiverCancelled(destination);
+ parent->receiverCancelled(destination);
} else {
source->subscribe(session, destination);
start();
@@ -129,23 +129,23 @@ uint32_t ReceiverImpl::getCapacity()
uint32_t ReceiverImpl::available()
{
- return parent.available(destination);
+ return parent->available(destination);
}
uint32_t ReceiverImpl::pendingAck()
{
- return parent.pendingAck(destination);
+ return parent->pendingAck(destination);
}
ReceiverImpl::ReceiverImpl(SessionImpl& p, const std::string& name,
const qpid::messaging::Address& a) :
- parent(p), destination(name), address(a), byteCredit(0xFFFFFFFF),
+ parent(&p), destination(name), address(a), byteCredit(0xFFFFFFFF),
state(UNRESOLVED), capacity(0), window(0) {}
bool ReceiverImpl::getImpl(qpid::messaging::Message& message, qpid::messaging::Duration timeout)
{
- return parent.get(*this, message, timeout);
+ return parent->get(*this, message, timeout);
}
bool ReceiverImpl::fetchImpl(qpid::messaging::Message& message, qpid::messaging::Duration timeout)
@@ -172,7 +172,7 @@ void ReceiverImpl::closeImpl()
if (state != CANCELLED) {
state = CANCELLED;
source->cancel(session, destination);
- parent.receiverCancelled(destination);
+ parent->receiverCancelled(destination);
}
}
@@ -188,7 +188,7 @@ void ReceiverImpl::setCapacityImpl(uint3
}
qpid::messaging::Session ReceiverImpl::getSession() const
{
- return qpid::messaging::Session(&parent);
+ return qpid::messaging::Session(parent.get());
}
}}} // namespace qpid::client::amqp0_10
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h Fri Mar 19 17:04:18 2010
@@ -28,6 +28,7 @@
#include "qpid/client/AsyncSession.h"
#include "qpid/client/amqp0_10/SessionImpl.h"
#include "qpid/messaging/Duration.h"
+#include <boost/intrusive_ptr.hpp>
#include <memory>
namespace qpid {
@@ -65,7 +66,7 @@ class ReceiverImpl : public qpid::messag
void received(qpid::messaging::Message& message);
qpid::messaging::Session getSession() const;
private:
- SessionImpl& parent;
+ boost::intrusive_ptr<SessionImpl> parent;
const std::string destination;
const qpid::messaging::Address address;
const uint32_t byteCredit;
@@ -133,13 +134,13 @@ class ReceiverImpl : public qpid::messag
template <class F> void execute()
{
F f(*this);
- parent.execute(f);
+ parent->execute(f);
}
template <class F, class P> void execute1(P p)
{
F f(*this, p);
- parent.execute(f);
+ parent->execute(f);
}
};
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp Fri Mar 19 17:04:18 2010
@@ -31,17 +31,17 @@ namespace amqp0_10 {
SenderImpl::SenderImpl(SessionImpl& _parent, const std::string& _name,
const qpid::messaging::Address& _address) :
- parent(_parent), name(_name), address(_address), state(UNRESOLVED),
+ parent(&_parent), name(_name), address(_address), state(UNRESOLVED),
capacity(50), window(0), flushed(false), unreliable(AddressResolution::is_unreliable(address)) {}
void SenderImpl::send(const qpid::messaging::Message& message)
{
if (unreliable) {
UnreliableSend f(*this, &message);
- parent.execute(f);
+ parent->execute(f);
} else {
Send f(*this, &message);
- while (f.repeat) parent.execute(f);
+ while (f.repeat) parent->execute(f);
}
}
@@ -60,7 +60,7 @@ uint32_t SenderImpl::getCapacity() { ret
uint32_t SenderImpl::pending()
{
CheckPendingSends f(*this, false);
- parent.execute(f);
+ parent->execute(f);
return f.pending;
}
@@ -73,7 +73,7 @@ void SenderImpl::init(qpid::client::Asyn
}
if (state == CANCELLED) {
sink->cancel(session, name);
- parent.senderCancelled(name);
+ parent->senderCancelled(name);
} else {
sink->declare(session, name);
replay();
@@ -140,7 +140,7 @@ void SenderImpl::closeImpl()
{
state = CANCELLED;
sink->cancel(session, name);
- parent.senderCancelled(name);
+ parent->senderCancelled(name);
}
const std::string& SenderImpl::getName() const
@@ -150,7 +150,7 @@ const std::string& SenderImpl::getName()
qpid::messaging::Session SenderImpl::getSession() const
{
- return qpid::messaging::Session(&parent);
+ return qpid::messaging::Session(parent.get());
}
}}} // namespace qpid::client::amqp0_10
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h Fri Mar 19 17:04:18 2010
@@ -28,6 +28,7 @@
#include "qpid/client/AsyncSession.h"
#include "qpid/client/amqp0_10/SessionImpl.h"
#include <memory>
+#include <boost/intrusive_ptr.hpp>
#include <boost/ptr_container/ptr_deque.hpp>
namespace qpid {
@@ -58,7 +59,7 @@ class SenderImpl : public qpid::messagin
qpid::messaging::Session getSession() const;
private:
- SessionImpl& parent;
+ boost::intrusive_ptr<SessionImpl> parent;
const std::string name;
const qpid::messaging::Address address;
State state;
@@ -143,13 +144,13 @@ class SenderImpl : public qpid::messagin
template <class F> void execute()
{
F f(*this);
- parent.execute(f);
+ parent->execute(f);
}
template <class F, class P> bool execute1(P p)
{
F f(*this, p);
- return parent.execute(f);
+ return parent->execute(f);
}
};
}}} // namespace qpid::client::amqp0_10
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp Fri Mar 19 17:04:18 2010
@@ -49,7 +49,7 @@ namespace qpid {
namespace client {
namespace amqp0_10 {
-SessionImpl::SessionImpl(ConnectionImpl& c, bool t) : connection(c), transactional(t) {}
+SessionImpl::SessionImpl(ConnectionImpl& c, bool t) : connection(&c), transactional(t) {}
void SessionImpl::sync()
@@ -108,7 +108,7 @@ void SessionImpl::close()
for (std::vector<std::string>::const_iterator i = r.begin(); i != r.end(); ++i) getReceiver(*i).close();
- connection.closed(*this);
+ connection->closed(*this);
session.close();
}
@@ -431,12 +431,12 @@ void SessionImpl::senderCancelled(const
void SessionImpl::reconnect()
{
- connection.connect();
+ connection->connect();
}
qpid::messaging::Connection SessionImpl::getConnection() const
{
- return qpid::messaging::Connection(&connection);
+ return qpid::messaging::Connection(connection.get());
}
}}} // namespace qpid::client::amqp0_10
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h Fri Mar 19 17:04:18 2010
@@ -29,6 +29,7 @@
#include "qpid/client/amqp0_10/AddressResolution.h"
#include "qpid/client/amqp0_10/IncomingMessages.h"
#include "qpid/sys/Mutex.h"
+#include <boost/intrusive_ptr.hpp>
namespace qpid {
@@ -106,7 +107,7 @@ class SessionImpl : public qpid::messagi
typedef std::map<std::string, qpid::messaging::Sender> Senders;
mutable qpid::sys::Mutex lock;
- ConnectionImpl& connection;
+ boost::intrusive_ptr<ConnectionImpl> connection;
qpid::client::Session session;
AddressResolution resolver;
IncomingMessages incoming;
Modified: qpid/trunk/qpid/cpp/src/tests/qpid_recv.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/qpid_recv.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/qpid_recv.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/qpid_recv.cpp Fri Mar 19 17:04:18 2010
@@ -148,8 +148,8 @@ int main(int argc, char ** argv)
{
Options opts;
if (opts.parse(argc, argv)) {
+ Connection connection(opts.connectionOptions);
try {
- Connection connection(opts.connectionOptions);
connection.open(opts.url);
std::auto_ptr<FailoverUpdates> updates(opts.failoverUpdates ? new FailoverUpdates(connection) : 0);
Session session = connection.newSession(opts.tx > 0);
@@ -207,6 +207,7 @@ int main(int argc, char ** argv)
return 0;
} catch(const std::exception& error) {
std::cerr << "Failure: " << error.what() << std::endl;
+ connection.close();
}
}
return 1;
Modified: qpid/trunk/qpid/cpp/src/tests/qpid_send.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/qpid_send.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/qpid_send.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/qpid_send.cpp Fri Mar 19 17:04:18 2010
@@ -181,8 +181,8 @@ int main(int argc, char ** argv)
{
Options opts;
if (opts.parse(argc, argv)) {
+ Connection connection(opts.connectionOptions);
try {
- Connection connection(opts.connectionOptions);
connection.open(opts.url);
std::auto_ptr<FailoverUpdates> updates(opts.failoverUpdates ? new FailoverUpdates(connection) : 0);
Session session = connection.newSession(opts.tx > 0);
@@ -230,6 +230,7 @@ int main(int argc, char ** argv)
return 0;
} catch(const std::exception& error) {
std::cout << "Failed: " << error.what() << std::endl;
+ connection.close();
}
}
return 1;
Modified: qpid/trunk/qpid/cpp/src/tests/qpid_stream.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/qpid_stream.cpp?rev=925332&r1=925331&r2=925332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/qpid_stream.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/qpid_stream.cpp Fri Mar 19 17:04:18 2010
@@ -87,8 +87,8 @@ struct Client : qpid::sys::Runnable
void run()
{
+ Connection connection;
try {
- Connection connection;
connection.open(opts.url);
Session session = connection.newSession();
doWork(session);
@@ -96,6 +96,7 @@ struct Client : qpid::sys::Runnable
connection.close();
} catch(const std::exception& error) {
std::cout << error.what() << std::endl;
+ connection.close();
}
}
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org