summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/src/qpid/broker/Broker.cpp6
-rw-r--r--cpp/src/qpid/broker/Broker.h8
-rw-r--r--cpp/src/qpid/broker/BrokerSingleton.cpp4
-rw-r--r--cpp/src/qpid/broker/BrokerSingleton.h4
-rw-r--r--cpp/src/qpid/broker/SignalHandler.cpp6
-rw-r--r--cpp/src/qpid/broker/SignalHandler.h6
-rw-r--r--cpp/src/qpidd.cpp4
-rw-r--r--cpp/src/tests/BrokerFixture.h2
-rw-r--r--cpp/src/tests/ForkedBroker.h6
9 files changed, 24 insertions, 22 deletions
diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp
index 4971458644..47d9dad537 100644
--- a/cpp/src/qpid/broker/Broker.cpp
+++ b/cpp/src/qpid/broker/Broker.cpp
@@ -240,16 +240,16 @@ void Broker::declareStandardExchange(const std::string& name, const std::string&
}
-shared_ptr<Broker> Broker::create(int16_t port)
+boost::intrusive_ptr<Broker> Broker::create(int16_t port)
{
Options config;
config.port=port;
return create(config);
}
-shared_ptr<Broker> Broker::create(const Options& opts)
+boost::intrusive_ptr<Broker> Broker::create(const Options& opts)
{
- return shared_ptr<Broker>(new Broker(opts));
+ return boost::intrusive_ptr<Broker>(new Broker(opts));
}
void Broker::setStore (MessageStore* _store)
diff --git a/cpp/src/qpid/broker/Broker.h b/cpp/src/qpid/broker/Broker.h
index be59cef24c..a8e5300718 100644
--- a/cpp/src/qpid/broker/Broker.h
+++ b/cpp/src/qpid/broker/Broker.h
@@ -44,7 +44,9 @@
#include "qpid/framing/OutputHandler.h"
#include "qpid/framing/ProtocolInitiation.h"
#include "qpid/sys/Runnable.h"
+#include "qpid/RefCounted.h"
+#include <boost/intrusive_ptr.hpp>
#include <vector>
namespace qpid {
@@ -64,7 +66,7 @@ static const uint16_t DEFAULT_PORT=5672;
* A broker instance.
*/
class Broker : public sys::Runnable, public Plugin::Target,
- public management::Manageable
+ public management::Manageable, public RefCounted
{
public:
@@ -89,8 +91,8 @@ class Broker : public sys::Runnable, public Plugin::Target,
virtual ~Broker();
Broker(const Options& configuration);
- static shared_ptr<Broker> create(const Options& configuration);
- static shared_ptr<Broker> create(int16_t port = DEFAULT_PORT);
+ static boost::intrusive_ptr<Broker> create(const Options& configuration);
+ static boost::intrusive_ptr<Broker> create(int16_t port = DEFAULT_PORT);
/**
* Return listening port. If called before bind this is
diff --git a/cpp/src/qpid/broker/BrokerSingleton.cpp b/cpp/src/qpid/broker/BrokerSingleton.cpp
index 77200dd760..5ba8c9d1e1 100644
--- a/cpp/src/qpid/broker/BrokerSingleton.cpp
+++ b/cpp/src/qpid/broker/BrokerSingleton.cpp
@@ -24,13 +24,13 @@ namespace broker {
BrokerSingleton::BrokerSingleton() {
if (broker.get() == 0)
broker = Broker::create();
- shared_ptr<Broker>::operator=(broker);
+ boost::intrusive_ptr<Broker>::operator=(broker);
}
BrokerSingleton::~BrokerSingleton() {
broker->shutdown();
}
-shared_ptr<Broker> BrokerSingleton::broker;
+boost::intrusive_ptr<Broker> BrokerSingleton::broker;
}} // namespace qpid::broker
diff --git a/cpp/src/qpid/broker/BrokerSingleton.h b/cpp/src/qpid/broker/BrokerSingleton.h
index 14b932df36..22b707506b 100644
--- a/cpp/src/qpid/broker/BrokerSingleton.h
+++ b/cpp/src/qpid/broker/BrokerSingleton.h
@@ -36,13 +36,13 @@ namespace broker {
*
* THREAD UNSAFE.
*/
-class BrokerSingleton : public shared_ptr<Broker>
+class BrokerSingleton : public boost::intrusive_ptr<Broker>
{
public:
BrokerSingleton();
~BrokerSingleton();
private:
- static shared_ptr<Broker> broker;
+ static boost::intrusive_ptr<Broker> broker;
};
}} // namespace qpid::broker
diff --git a/cpp/src/qpid/broker/SignalHandler.cpp b/cpp/src/qpid/broker/SignalHandler.cpp
index c6d7b10218..fee54cfdfc 100644
--- a/cpp/src/qpid/broker/SignalHandler.cpp
+++ b/cpp/src/qpid/broker/SignalHandler.cpp
@@ -25,9 +25,9 @@
namespace qpid {
namespace broker {
-boost::shared_ptr<Broker> SignalHandler::broker;
+boost::intrusive_ptr<Broker> SignalHandler::broker;
-void SignalHandler::setBroker(const boost::shared_ptr<Broker>& b) {
+void SignalHandler::setBroker(const boost::intrusive_ptr<Broker>& b) {
broker = b;
signal(SIGINT,shutdownHandler);
@@ -44,7 +44,7 @@ void SignalHandler::setBroker(const boost::shared_ptr<Broker>& b) {
void SignalHandler::shutdownHandler(int) {
if (broker.get()) {
broker->shutdown();
- broker.reset();
+ broker = 0; // Release the broker reference.
}
}
diff --git a/cpp/src/qpid/broker/SignalHandler.h b/cpp/src/qpid/broker/SignalHandler.h
index 3da7d09756..d2cdfae07c 100644
--- a/cpp/src/qpid/broker/SignalHandler.h
+++ b/cpp/src/qpid/broker/SignalHandler.h
@@ -22,7 +22,7 @@
*
*/
-#include <boost/shared_ptr.hpp>
+#include <boost/intrusive_ptr.hpp>
namespace qpid {
namespace broker {
@@ -36,11 +36,11 @@ class SignalHandler
{
public:
/** Set the broker to be shutdown on signals */
- static void setBroker(const boost::shared_ptr<Broker>& broker);
+ static void setBroker(const boost::intrusive_ptr<Broker>& broker);
private:
static void shutdownHandler(int);
- static boost::shared_ptr<Broker> broker;
+ static boost::intrusive_ptr<Broker> broker;
};
}} // namespace qpid::broker
diff --git a/cpp/src/qpidd.cpp b/cpp/src/qpidd.cpp
index 3d4b25e1a8..e79875f964 100644
--- a/cpp/src/qpidd.cpp
+++ b/cpp/src/qpidd.cpp
@@ -142,7 +142,7 @@ struct QpiddDaemon : public Daemon {
/** Code for forked child process */
void child() {
- shared_ptr<Broker> brokerPtr(new Broker(options->broker));
+ boost::intrusive_ptr<Broker> brokerPtr(new Broker(options->broker));
broker::SignalHandler::setBroker(brokerPtr);
uint16_t port=brokerPtr->getPort();
ready(port); // Notify parent.
@@ -244,7 +244,7 @@ int main(int argc, char* argv[])
d.fork(); // Broker is stared in QpiddDaemon::child()
}
else { // Non-daemon broker.
- shared_ptr<Broker> brokerPtr(new Broker(options->broker));
+ boost::intrusive_ptr<Broker> brokerPtr(new Broker(options->broker));
broker::SignalHandler::setBroker(brokerPtr);
if (options->broker.port == 0)
cout << uint16_t(brokerPtr->getPort()) << endl;
diff --git a/cpp/src/tests/BrokerFixture.h b/cpp/src/tests/BrokerFixture.h
index b28dfe9c0c..09cca066ef 100644
--- a/cpp/src/tests/BrokerFixture.h
+++ b/cpp/src/tests/BrokerFixture.h
@@ -36,7 +36,7 @@
*/
struct BrokerFixture : private boost::noncopyable {
typedef qpid::broker::Broker Broker;
- typedef boost::shared_ptr<Broker> BrokerPtr;
+ typedef boost::intrusive_ptr<Broker> BrokerPtr;
BrokerPtr broker;
qpid::sys::Thread brokerThread;
diff --git a/cpp/src/tests/ForkedBroker.h b/cpp/src/tests/ForkedBroker.h
index 5fb1ce8478..e01034c355 100644
--- a/cpp/src/tests/ForkedBroker.h
+++ b/cpp/src/tests/ForkedBroker.h
@@ -91,7 +91,7 @@ class ForkedBroker : public qpid::sys::ForkWithMessage {
prefix += boost::lexical_cast<std::string>(long(getpid()));
qpid::log::Logger::instance().setPrefix(prefix);
opts.port = 0;
- boost::shared_ptr<qpid::broker::Broker> broker(new qpid::broker::Broker(opts));
+ boost::intrusive_ptr<qpid::broker::Broker> broker(new qpid::broker::Broker(opts));
qpid::broker::SignalHandler::setBroker(broker);
QPID_LOG(info, "ForkedBroker started on " << broker->getPort());
ready(boost::lexical_cast<std::string>(broker->getPort())); // Notify parent.
@@ -99,8 +99,8 @@ class ForkedBroker : public qpid::sys::ForkWithMessage {
QPID_LOG(notice, "ForkedBroker exiting.");
// Force exit in the child process, otherwise we will try to
- // carry with parent tests.
- broker.reset(); // Run broker dtor before we exit.
+ // carry with parent tests.
+ broker = 0; // Run broker dtor before we exit.
exit(0);
}