From 598a9d7302ffad7653cada366084c3516ee35ad8 Mon Sep 17 00:00:00 2001 From: "Stephen D. Huston" Date: Tue, 3 Mar 2015 23:09:54 +0000 Subject: Fix possible double-free discussed in QPID-6368 git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1663828 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/PersistableQueue.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/broker/PersistableQueue.h b/qpid/cpp/src/qpid/broker/PersistableQueue.h index 655d26bc74..6733163084 100644 --- a/qpid/cpp/src/qpid/broker/PersistableQueue.h +++ b/qpid/cpp/src/qpid/broker/PersistableQueue.h @@ -25,7 +25,6 @@ #include #include "qpid/broker/Persistable.h" #include "qpid/management/Manageable.h" -#include namespace qpid { namespace broker { @@ -51,12 +50,12 @@ public: class PersistableQueue : public Persistable { public: - typedef boost::shared_ptr shared_ptr; - virtual const std::string& getName() const = 0; virtual ~PersistableQueue() { - if (externalQueueStore) + if (externalQueueStore) { delete externalQueueStore; + externalQueueStore = 0; + } }; virtual void setExternalQueueStore(ExternalQueueStore* inst) = 0; -- cgit v1.2.1 From e2e5605ff0f0597bbb2a596ae2c9e0dc54aef7f0 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 4 Mar 2015 21:02:16 +0000 Subject: QPID-4710: adjust version checking used by new tx interop tests so as not to fail existing tests when either ptoron python lib is not on path or is 0.7 or earlier git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1664144 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/tests/brokertest.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/tests/brokertest.py b/qpid/cpp/src/tests/brokertest.py index 2566bc527d..6fae88092b 100644 --- a/qpid/cpp/src/tests/brokertest.py +++ b/qpid/cpp/src/tests/brokertest.py @@ -21,7 +21,6 @@ import os, signal, string, tempfile, subprocess, socket, threading, time, imp, re import qpid, traceback, signal -import proton from qpid import connection, util from qpid.compat import format_exc from unittest import TestCase @@ -493,7 +492,16 @@ class BrokerTest(TestCase): test_store_lib = os.getenv("TEST_STORE_LIB") rootdir = os.getcwd() - PN_VERSION = (proton.VERSION_MAJOR, proton.VERSION_MINOR) + try: + import proton + PN_VERSION = (proton.VERSION_MAJOR, proton.VERSION_MINOR) + except ImportError: + # proton not on path, can't determine version + PN_VERSION = (0, 0) + except AttributeError: + # prior to 0.8 proton did not expose version info + PN_VERSION = (0, 7) + PN_TX_VERSION = (0, 9) amqp_tx_supported = PN_VERSION >= PN_TX_VERSION @@ -501,7 +509,12 @@ class BrokerTest(TestCase): @classmethod def amqp_tx_warning(cls): if not cls.amqp_tx_supported: - print "WARNING: Cannot test transactions over AMQP 1.0, proton version %s.%s < %s.%s" % (cls.PN_VERSION + cls.PN_TX_VERSION) + if cls.PN_VERSION == (0, 0): + print "WARNING: Cannot test transactions over AMQP 1.0, proton not on path so version could not be determined" + elif cls.PN_VERSION == (0, 7): + print "WARNING: Cannot test transactions over AMQP 1.0, proton version is 0.7 or less, %s.%s required" % cls.PN_TX_VERSION + else: + print "WARNING: Cannot test transactions over AMQP 1.0, proton version %s.%s < %s.%s" % (cls.PN_VERSION + cls.PN_TX_VERSION) return False return True -- cgit v1.2.1 From b60fcf2a74a3727a18bdd6f2b46d745a420d6669 Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Thu, 5 Mar 2015 11:37:35 +0000 Subject: QPID-6397: [C++ broker] segfault when processing QMF method during periodic processing git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1664313 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/management/ManagementAgent.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/management/ManagementAgent.cpp b/qpid/cpp/src/qpid/management/ManagementAgent.cpp index 1eab6f622b..516babce61 100644 --- a/qpid/cpp/src/qpid/management/ManagementAgent.cpp +++ b/qpid/cpp/src/qpid/management/ManagementAgent.cpp @@ -706,8 +706,8 @@ void ManagementAgent::moveNewObjects() void ManagementAgent::periodicProcessing (void) { #define HEADROOM 4096 - debugSnapshot("Management agent periodic processing"); sys::Mutex::ScopedLock lock (userLock); + debugSnapshot("Management agent periodic processing"); string routingKey; string sBuf; @@ -2704,6 +2704,8 @@ string ManagementAgent::summarizeAgents() { void ManagementAgent::debugSnapshot(const char* title) { + sys::Mutex::ScopedLock lock(addLock); + sys::Mutex::ScopedLock objLock (objectLock); QPID_LOG(debug, title << ": management snapshot: " << packages.size() << " packages, " << summarizeMap("objects", managementObjects) -- cgit v1.2.1 From 7fc4b15721a31af5bf064c8acd1f2c092603292b Mon Sep 17 00:00:00 2001 From: aconway Date: Thu, 5 Mar 2015 20:44:49 +0000 Subject: QPID-6427: Fixed unit test build problem on RHEL 5. RHEL5 compiler choked on some boost template magic, simplified the test. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1664479 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/tests/Variant.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/tests/Variant.cpp b/qpid/cpp/src/tests/Variant.cpp index d6605f9fe5..5ae7fc89eb 100644 --- a/qpid/cpp/src/tests/Variant.cpp +++ b/qpid/cpp/src/tests/Variant.cpp @@ -815,12 +815,16 @@ QPID_AUTO_TEST_CASE(described) BOOST_CHECK(!a.isDescribed()); a.getDescriptors().push_back("foo"); BOOST_CHECK(a.isDescribed()); - BOOST_CHECK_EQUAL(a.getDescriptors(), list_of("foo")); + BOOST_CHECK_EQUAL(a.getDescriptors().size(), 1U); + BOOST_CHECK_EQUAL(a.getDescriptors().front(), Variant("foo")); a = 42; BOOST_CHECK(a.isDescribed()); - BOOST_CHECK_EQUAL(a.getDescriptors(), list_of("foo")); + BOOST_CHECK_EQUAL(a.getDescriptors().size(), 1U); + BOOST_CHECK_EQUAL(a.getDescriptors().front(), Variant("foo")); a.getDescriptors().push_back(33); - BOOST_CHECK_EQUAL(a.getDescriptors(), list_of("foo")(33)); + BOOST_CHECK_EQUAL(a.getDescriptors().size(), 2U); + BOOST_CHECK_EQUAL(a.getDescriptors().front(), Variant("foo")); + BOOST_CHECK_EQUAL(*(++a.getDescriptors().begin()), Variant(33)); a.getDescriptors().clear(); BOOST_CHECK(!a.isDescribed()); } -- cgit v1.2.1 From 70ee30d900ab5df4631c082c24ddf3cfddc67a97 Mon Sep 17 00:00:00 2001 From: aconway Date: Thu, 5 Mar 2015 22:32:00 +0000 Subject: QPID-6427: Problem building trunk qpid cpp on RHEL 5 Fixed a couple of legitimate compiler warnings, worked around a couple of compiler weaknesses. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1664517 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/amqp/Session.cpp | 4 ++-- qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp | 4 ++-- qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.h | 2 +- qpid/cpp/src/qpid/messaging/amqp/SenderContext.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/broker/amqp/Session.cpp b/qpid/cpp/src/qpid/broker/amqp/Session.cpp index 3b65e6a64d..9cd6aae26f 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Session.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/Session.cpp @@ -835,7 +835,7 @@ void Session::abort() tx.dischargeComplete(); tx.buffer->rollback(); txAborted(); - tx.buffer.reset(); + tx.buffer = boost::intrusive_ptr(); QPID_LOG(debug, "Transaction " << tx.id << " rolled back"); } } @@ -848,7 +848,7 @@ void Session::committed(bool sync) if (tx.buffer.get()) { tx.buffer->endCommit(&connection.getBroker().getStore()); txCommitted(); - tx.buffer.reset(); + tx.buffer = boost::intrusive_ptr(); QPID_LOG(debug, "Transaction " << tx.id << " comitted"); } else { throw Exception(qpid::amqp::error_conditions::transaction::ROLLBACK, "tranaction vanished during async commit"); diff --git a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp index d4a7b60e3c..0c516311da 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp +++ b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp @@ -230,7 +230,7 @@ void ConnectionContext::close() } if (ticker) { ticker->cancel(); - ticker.reset(); + ticker = boost::intrusive_ptr(); } } @@ -1236,7 +1236,7 @@ void ConnectionContext::startTxSession(boost::shared_ptr session QPID_LOG(debug, id << " attaching transaction for " << session->getName()); boost::shared_ptr tx(new Transaction(session->session)); session->transaction = tx; - attach(session, tx); + attach(session, boost::shared_ptr(tx)); tx->declare(boost::bind(&ConnectionContext::send, this, _1, _2, _3, _4, _5), session); } catch (const Exception& e) { throw TransactionError(Msg() << "Cannot start transaction: " << e.what()); diff --git a/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.h b/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.h index 2b4e8e1986..dd1352aecb 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.h +++ b/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.h @@ -46,7 +46,7 @@ class ReceiverContext { public: ReceiverContext(pn_session_t* session, const std::string& name, const qpid::messaging::Address& source); - ~ReceiverContext(); + virtual ~ReceiverContext(); void reset(pn_session_t* session); void setCapacity(uint32_t); uint32_t getCapacity(); diff --git a/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h b/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h index 4d3c4bee79..467a8e0d3d 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h +++ b/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h @@ -76,7 +76,7 @@ class SenderContext const qpid::messaging::Address& target, bool setToOnSend, const CoordinatorPtr& transaction = CoordinatorPtr()); - ~SenderContext(); + virtual ~SenderContext(); virtual void reset(pn_session_t* session); virtual void close(); -- cgit v1.2.1 From 08acb6bdc6ded10012ff4c2d2e303121b4985882 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 11 Mar 2015 17:58:52 +0000 Subject: QPID-6444: remove unused functions git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1665954 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/amqp/Connection.cpp | 10 ---------- qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp | 7 ------- 2 files changed, 17 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp index e315e55843..5593f755e5 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp @@ -453,16 +453,6 @@ void Connection::process() } #endif // !HAVE_PROTON_EVENTS } -namespace { -std::string convert(pn_delivery_tag_t in) -{ -#ifdef NO_PROTON_DELIVERY_TAG_T - return std::string(in.start, in.size); -#else - return std::string(in.bytes, in.size); -#endif -} -} void Connection::processDeliveries() { #ifdef HAVE_PROTON_EVENTS diff --git a/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp b/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp index 2106e21686..8033cc5dee 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp +++ b/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp @@ -138,13 +138,6 @@ uint64_t getFilterDescriptor(const std::string& key) { return hasWildcards(key) ? qpid::amqp::filters::LEGACY_TOPIC_FILTER_CODE : qpid::amqp::filters::LEGACY_DIRECT_FILTER_CODE; } -bool contains(const Variant::List& list, const std::string& item) -{ - for (Variant::List::const_iterator i = list.begin(); i != list.end(); ++i) { - if (*i == item) return true; - } - return false; -} bool test(const Variant::Map& options, const std::string& name) { -- cgit v1.2.1