Selaa lähdekoodia

Fix memory leaks in DAH classes.

Fixing memory leaks by properly making use of Qt's implicitly shared
container classes.
Sascha Zelzer 14 vuotta sitten
vanhempi
commit
552e345e43

+ 2 - 2
Plugins/org.commontk.dah.app/ctkDicomHostService.cpp

@@ -19,7 +19,7 @@
 
 =============================================================================*/
 
-#include "ctkDicomHostService.h"
+#include "ctkDicomHostService_p.h"
 
 #include "ctkDicomServicePrivate.h"
 
@@ -87,7 +87,7 @@ bool ctkDicomHostService::notifyDataAvailable(ctkDicomAppHosting::AvailableData
   return service.notifyDataAvailable(data, lastData);
 }
 
-QList<ctkDicomAppHosting::ObjectLocator>* ctkDicomHostService::getData(
+QList<ctkDicomAppHosting::ObjectLocator> ctkDicomHostService::getData(
   QList<QUuid> objectUUIDs, 
   QList<QString> acceptableTransferSyntaxUIDs, 
   bool includeBulkData)

+ 11 - 10
Plugins/org.commontk.dah.core/ctkDicomAppHostingTypesHelper.h

@@ -195,12 +195,13 @@ public:
     }
   }
 
-  static QStringList* getArray(const QtSoapArray& array)
+  static QStringList getArray(const QtSoapArray& array)
   {
-    QStringList * list = new QStringList();
-    for (int i = 0; i < array.count() ; i++ ){
+    QStringList list;
+    for (int i = 0; i < array.count() ; i++ )
+    {
       const QString str = array.at(i).value().toString();
-      list->append( str);
+      list << str;
     }
     return list;
   }
@@ -223,13 +224,13 @@ public:
     }
   }
 
-  static QList<QUuid>* getArray(const QtSoapArray& array)
+  static QList<QUuid> getArray(const QtSoapArray& array)
   {
-    QList<QUuid> * list = new QList<QUuid>();
+    QList<QUuid> list;
     for (int i = 0; i < array.count() ; i++ )
     {
       const QString str = array.at(i).value().toString();
-      list->append( QUuid(str));
+      list << QUuid(str);
     }
     return list;
   }
@@ -560,15 +561,15 @@ public:
     }
   }
 
-  static QList<ctkDicomAppHosting::ObjectLocator>* getArray(const QtSoapArray& array)
+  static QList<ctkDicomAppHosting::ObjectLocator> getArray(const QtSoapArray& array)
   {
-    QList<ctkDicomAppHosting::ObjectLocator> * list = new QList<ctkDicomAppHosting::ObjectLocator>();
+    QList<ctkDicomAppHosting::ObjectLocator> list;
 
     for (int i = 0; i < array.count() ; i++ )
     {
       const ctkDicomAppHosting::ObjectLocator ol =
           ctkDicomSoapObjectLocator::getObjectLocator(array.at(i));
-      list->append(ol);
+      list << ol;
     }
     return list;
   }

+ 1 - 1
Plugins/org.commontk.dah.core/ctkDicomExchangeInterface.h

@@ -39,7 +39,7 @@ public:
 
   virtual bool notifyDataAvailable(ctkDicomAppHosting::AvailableData data, bool lastData) = 0;
 
-  virtual QList<ctkDicomAppHosting::ObjectLocator>* getData(
+  virtual QList<ctkDicomAppHosting::ObjectLocator> getData(
     QList<QUuid> objectUUIDs, 
     QList<QString> acceptableTransferSyntaxUIDs, 
     bool includeBulkData) = 0;

+ 1 - 1
Plugins/org.commontk.dah.core/ctkDicomExchangeService.cpp

@@ -48,7 +48,7 @@ bool ctkDicomExchangeService::notifyDataAvailable(
   return ctkDicomSoapBool::getBool(result);
 }
 
-QList<ctkDicomAppHosting::ObjectLocator>* ctkDicomExchangeService::getData(
+QList<ctkDicomAppHosting::ObjectLocator> ctkDicomExchangeService::getData(
     QList<QUuid> objectUUIDs,
     QList<QString> acceptableTransferSyntaxUIDs, bool includeBulkData)
 {

+ 1 - 1
Plugins/org.commontk.dah.core/ctkDicomExchangeService.h

@@ -37,7 +37,7 @@ public:
   ~ctkDicomExchangeService();
 
   bool notifyDataAvailable(ctkDicomAppHosting::AvailableData data, bool lastData);
-  QList<ctkDicomAppHosting::ObjectLocator> *getData(QList<QUuid> objectUUIDs,
+  QList<ctkDicomAppHosting::ObjectLocator> getData(QList<QUuid> objectUUIDs,
                                              QList<QString> acceptableTransferSyntaxUIDs, bool includeBulkData);
   void releaseData(QList<QUuid> objectUUIDs);
 

+ 5 - 5
Plugins/org.commontk.dah.core/ctkExchangeSoapMessageProcessor.cpp

@@ -80,19 +80,19 @@ void ctkExchangeSoapMessageProcessor::processGetData(
 {
   // extract arguments from input message
   const QtSoapType& inputType = message.method()["objectUUIDs"];
-  const QList<QUuid>* objectUUIDs = ctkDicomSoapArrayOfUUIDS::getArray(
+  const QList<QUuid> objectUUIDs = ctkDicomSoapArrayOfUUIDS::getArray(
     dynamic_cast<const QtSoapArray&>(inputType));
   const QtSoapType& inputType2 = message.method()["acceptableTransferSyntaxUIDs"];
-  const QStringList* acceptableTransferSyntaxUIDs = ctkDicomSoapArrayOfStringType::getArray(
+  const QStringList acceptableTransferSyntaxUIDs = ctkDicomSoapArrayOfStringType::getArray(
     dynamic_cast<const QtSoapArray&>(inputType2));
   const QtSoapType& inputType3 = message.method()["includeBulkData"];
   const bool includeBulkData = ctkDicomSoapBool::getBool(inputType3);
   // query interface
-  const QList<ctkDicomAppHosting::ObjectLocator>* result = exchangeInterface->getData(
-    *objectUUIDs, *acceptableTransferSyntaxUIDs, includeBulkData);
+  const QList<ctkDicomAppHosting::ObjectLocator> result = exchangeInterface->getData(
+    objectUUIDs, acceptableTransferSyntaxUIDs, includeBulkData);
   // set reply message
   reply->setMethod("getData");
-  QtSoapType* resultType = new ctkDicomSoapArrayOfObjectLocators("arrayOfObjectLocator", *result);
+  QtSoapType* resultType = new ctkDicomSoapArrayOfObjectLocators("arrayOfObjectLocator", result);
   reply->addMethodArgument(resultType);
 }
 

+ 2 - 0
Plugins/org.commontk.dah.core/ctkSoapMessageProcessor.h

@@ -31,6 +31,8 @@ class org_commontk_dah_core_EXPORT ctkSoapMessageProcessor
 
 public:
 
+  virtual ~ctkSoapMessageProcessor() {}
+
 	/**
 	* Process a Soap Message and set the input reply.
 	* @input message The message to process.

+ 7 - 3
Plugins/org.commontk.dah.core/ctkSoapMessageProcessorList.cpp

@@ -21,6 +21,11 @@
 
 #include "ctkSoapMessageProcessorList.h"
 
+ctkSoapMessageProcessorList::~ctkSoapMessageProcessorList()
+{
+  qDeleteAll(processors);
+}
+
 void ctkSoapMessageProcessorList::push_back( ctkSoapMessageProcessor* processor )
 {
   processors.push_back( processor );
@@ -30,10 +35,9 @@ bool ctkSoapMessageProcessorList::process(
     const QtSoapMessage& message,
     QtSoapMessage* reply ) const
 {
-  for(std::list<ctkSoapMessageProcessor*>::const_iterator it = processors.begin();
-      it != processors.end(); it++)
+  foreach(ctkSoapMessageProcessor* processor, processors)
   {
-    if( (*it)->process( message, reply ) )
+    if( processor->process( message, reply ) )
     {
       return true;
     }

+ 5 - 2
Plugins/org.commontk.dah.core/ctkSoapMessageProcessorList.h

@@ -22,7 +22,8 @@
 #ifndef CTKSOAPMESSAGEPROCESSORLIST_H
 #define CTKSOAPMESSAGEPROCESSORLIST_H
 
-#include <list>
+#include <QList>
+
 #include "ctkSoapMessageProcessor.h"
 
 #include <org_commontk_dah_core_Export.h>
@@ -32,6 +33,8 @@ class org_commontk_dah_core_EXPORT ctkSoapMessageProcessorList : public ctkSoapM
 
 public:
 
+  ~ctkSoapMessageProcessorList();
+
   void push_back( ctkSoapMessageProcessor* processor );
 
   bool process(const QtSoapMessage& message,
@@ -39,7 +42,7 @@ public:
 
 private:
 
-  std::list<ctkSoapMessageProcessor*> processors;
+  QList<ctkSoapMessageProcessor*> processors;
 
 };
 

+ 2 - 2
Plugins/org.commontk.dah.exampleapp/ctkExampleDicomAppLogic.cpp

@@ -98,7 +98,7 @@ bool ctkExampleDicomAppLogic::notifyDataAvailable(ctkDicomAppHosting::AvailableD
   return false;
 }
 
-QList<ctkDicomAppHosting::ObjectLocator>* ctkExampleDicomAppLogic::getData(
+QList<ctkDicomAppHosting::ObjectLocator> ctkExampleDicomAppLogic::getData(
   QList<QUuid> objectUUIDs, 
   QList<QString> acceptableTransferSyntaxUIDs, 
   bool includeBulkData)
@@ -106,7 +106,7 @@ QList<ctkDicomAppHosting::ObjectLocator>* ctkExampleDicomAppLogic::getData(
   Q_UNUSED(objectUUIDs)
   Q_UNUSED(acceptableTransferSyntaxUIDs)
   Q_UNUSED(includeBulkData)
-  return NULL;
+  return QList<ctkDicomAppHosting::ObjectLocator>();
 }
 void ctkExampleDicomAppLogic::releaseData(QList<QUuid> objectUUIDs)
 {

+ 1 - 1
Plugins/org.commontk.dah.exampleapp/ctkExampleDicomAppLogic_p.h

@@ -67,7 +67,7 @@ public:
 
   // ctkDicomExchangeInterface
   bool notifyDataAvailable(ctkDicomAppHosting::AvailableData data, bool lastData);
-  QList<ctkDicomAppHosting::ObjectLocator>* getData(
+  QList<ctkDicomAppHosting::ObjectLocator> getData(
     QList<QUuid> objectUUIDs, 
     QList<QString> acceptableTransferSyntaxUIDs, 
     bool includeBulkData);

+ 3 - 3
Plugins/org.commontk.dah.examplehost/ctkExampleDicomHost.cpp

@@ -104,7 +104,7 @@ bool ctkExampleDicomHost::notifyDataAvailable(ctkDicomAppHosting::AvailableData
   return false;
 }
 
-QList<ctkDicomAppHosting::ObjectLocator>* ctkExampleDicomHost::getData(
+QList<ctkDicomAppHosting::ObjectLocator> ctkExampleDicomHost::getData(
     QList<QUuid> objectUUIDs,
     QList<QString> acceptableTransferSyntaxUIDs,
     bool includeBulkData)
@@ -112,9 +112,9 @@ QList<ctkDicomAppHosting::ObjectLocator>* ctkExampleDicomHost::getData(
   Q_UNUSED(objectUUIDs)
   Q_UNUSED(acceptableTransferSyntaxUIDs)
   Q_UNUSED(includeBulkData)
-  return NULL;
+  return QList<ctkDicomAppHosting::ObjectLocator>();
 }
 void ctkExampleDicomHost::releaseData(QList<QUuid> objectUUIDs)
 {
   Q_UNUSED(objectUUIDs)
-  }
+}

+ 1 - 1
Plugins/org.commontk.dah.examplehost/ctkExampleDicomHost.h

@@ -46,7 +46,7 @@ public:
   virtual void notifyStatus(const ctkDicomAppHosting::Status& status);
   // exchange methods
   virtual bool notifyDataAvailable(ctkDicomAppHosting::AvailableData data, bool lastData);
-  virtual QList<ctkDicomAppHosting::ObjectLocator>* getData(
+  virtual QList<ctkDicomAppHosting::ObjectLocator> getData(
       QList<QUuid> objectUUIDs, 
       QList<QString> acceptableTransferSyntaxUIDs, 
       bool includeBulkData);

+ 1 - 1
Plugins/org.commontk.dah.host/ctkDicomAppService.cpp

@@ -64,7 +64,7 @@ bool ctkDicomAppService::notifyDataAvailable(ctkDicomAppHosting::AvailableData d
   return service.notifyDataAvailable(data, lastData);
 }
 
-QList<ctkDicomAppHosting::ObjectLocator>* ctkDicomAppService::getData(
+QList<ctkDicomAppHosting::ObjectLocator> ctkDicomAppService::getData(
   QList<QUuid> objectUUIDs, 
   QList<QString> acceptableTransferSyntaxUIDs, 
   bool includeBulkData)

+ 1 - 1
Plugins/org.commontk.dah.host/ctkDicomAppService.h

@@ -40,7 +40,7 @@ public:
 
   // Exchange methods
   bool notifyDataAvailable(ctkDicomAppHosting::AvailableData data, bool lastData);
-  QList<ctkDicomAppHosting::ObjectLocator>* getData(
+  QList<ctkDicomAppHosting::ObjectLocator> getData(
     QList<QUuid> objectUUIDs, 
     QList<QString> acceptableTransferSyntaxUIDs, 
     bool includeBulkData);

+ 2 - 2
Plugins/org.commontk.dah.host/ctkHostSoapMessageProcessor.cpp

@@ -122,10 +122,10 @@ void ctkHostSoapMessageProcessor::processGetOutputLocation(
 {
   // extract arguments from input message
   const QtSoapType& inputType = message.method()["preferredProtocols"];
-  const QStringList* preferredProtocols = ctkDicomSoapArrayOfStringType::getArray(
+  const QStringList preferredProtocols = ctkDicomSoapArrayOfStringType::getArray(
     dynamic_cast<const QtSoapArray&>(inputType));
   // query interface
-  const QString result = hostInterface->getOutputLocation(*preferredProtocols);
+  const QString result = hostInterface->getOutputLocation(preferredProtocols);
   // set reply message
   reply->setMethod("getOutputLocation");
   QtSoapType* resultType = new QtSoapSimpleType( QtSoapQName("preferredProtocols"), result );