Sfoglia il codice sorgente

Fix memory leaks in DAH classes.

Fixing memory leaks by properly making use of Qt's implicitly shared
container classes.
Sascha Zelzer 14 anni fa
parent
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 );