Author: tross
Date: Mon Nov 10 08:53:41 2008
New Revision: 712696
URL: http://svn.apache.org/viewvc?rev=712696&view=rev
Log:
QPID-1446 - Fixed memory leak in management agent affecting broker.
Added debug output to remote agent controllable via env variable.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h
incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp?rev=712696&r1=712695&r2=712696&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp Mon
Nov 10 08:53:41 2008
@@ -23,6 +23,7 @@
#include "ManagementAgentImpl.h"
#include <list>
#include <string.h>
+#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
@@ -80,11 +81,13 @@
extThread(false), writeFd(-1), readFd(-1),
connected(false), lastFailure("never connected"),
clientWasAdded(true), requestedBrokerBank(0), requestedAgentBank(0),
- assignedBrokerBank(0), assignedAgentBank(0), bootSequence(0),
+ assignedBrokerBank(0), assignedAgentBank(0), bootSequence(0),
debugLevel(0),
connThreadBody(*this), connThread(connThreadBody),
pubThreadBody(*this), pubThread(pubThreadBody)
{
- // TODO: Establish system ID
+ char* debug = ::getenv("QMF_DEBUG_LEVEL");
+ if (debug)
+ debugLevel = ::atoi(debug);
}
ManagementAgentImpl::~ManagementAgentImpl()
@@ -111,6 +114,10 @@
host = brokerHost;
port = brokerPort;
+ if (debugLevel)
+ cout << "QMF Agent Initialized: broker=" << brokerHost << ":" <<
brokerPort <<
+ " interval=" << intervalSeconds << " storeFile=" << _storeFile <<
endl;
+
// TODO: Abstract the socket calls for portability
if (extThread) {
int pair[2];
@@ -692,8 +699,13 @@
// Delete flagged objects
for (std::list<ObjectId>::reverse_iterator iter = deleteList.rbegin();
iter != deleteList.rend();
- iter++)
- managementObjects.erase(*iter);
+ iter++) {
+ ManagementObjectMap::iterator miter = managementObjects.find(*iter);
+ if (miter != managementObjects.end()) {
+ delete miter->second;
+ managementObjects.erase(*iter);
+ }
+ }
deleteList.clear();
}
@@ -712,6 +724,8 @@
while (true) {
try {
if (!agent.host.empty()) {
+ if (agent.debugLevel)
+ cout << "QMF Agent attempting to connect to the broker..."
<< endl;
connection.open(agent.host.c_str(), agent.port);
session = connection.newSession(queueName.str());
subscriptions = new client::SubscriptionManager(session);
@@ -721,6 +735,8 @@
arg::bindingKey=queueName.str());
subscriptions->subscribe(agent, queueName.str(), dest);
+ if (agent.debugLevel)
+ cout << " Connection established" << endl;
{
Mutex::ScopedLock _lock(connLock);
operational = true;
@@ -730,6 +746,9 @@
subscriptions->run();
} catch (std::exception) {}
+ if (agent.debugLevel)
+ cout << "QMF Agent connection has been lost" << endl;
+
operational = false;
}
delay = delayMin;
@@ -741,6 +760,8 @@
} catch (std::exception &e) {
if (delay < delayMax)
delay *= delayFactor;
+ if (agent.debugLevel)
+ cout << " Connection failed: exception=" << e.what() <<
endl;
}
{
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h?rev=712696&r1=712695&r2=712696&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h Mon Nov
10 08:53:41 2008
@@ -141,6 +141,7 @@
uint32_t assignedBrokerBank;
uint32_t assignedAgentBank;
uint16_t bootSequence;
+ uint8_t debugLevel;
# define MA_BUFFER_SIZE 65536
char outputBuffer[MA_BUFFER_SIZE];
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp?rev=712696&r1=712695&r2=712696&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp Mon
Nov 10 08:53:41 2008
@@ -409,8 +409,13 @@
// Delete flagged objects
for (std::list<ObjectId>::reverse_iterator iter = deleteList.rbegin ();
iter != deleteList.rend ();
- iter++)
- managementObjects.erase (*iter);
+ iter++) {
+ ManagementObjectMap::iterator miter = managementObjects.find(*iter);
+ if (miter != managementObjects.end()) {
+ delete miter->second;
+ managementObjects.erase(*iter);
+ }
+ }
if (!deleteList.empty()) {
deleteList.clear();