Browse Source

CRASH-FIX: When the http request fails, a ctkException is thrown and never catched at the ctkXnat* level, making the whole application to crash, we need to try-catch every instance of the method httpResults(), it is done here at the Experiment level

Nicolas Toussaint 11 years ago
parent
commit
249563c91a
1 changed files with 36 additions and 8 deletions
  1. 36 8
      Libs/XNAT/Core/ctkXnatExperiment.cpp

+ 36 - 8
Libs/XNAT/Core/ctkXnatExperiment.cpp

@@ -32,6 +32,8 @@
 #include "ctkXnatAssessorFolder.h"
 #include "ctkXnatAssessorFolder.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
+#include <qDebug>
+
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 class ctkXnatExperimentPrivate : public ctkXnatObjectPrivate
 class ctkXnatExperimentPrivate : public ctkXnatObjectPrivate
 {
 {
@@ -81,8 +83,17 @@ void ctkXnatExperiment::fetchImpl()
   ctkXnatSession* const session = this->session();
   ctkXnatSession* const session = this->session();
   QUuid scansQueryId = session->httpGet(scansUri);
   QUuid scansQueryId = session->httpGet(scansUri);
 
 
-  QList<ctkXnatObject*> scans = session->httpResults(scansQueryId,
-                                                     ctkXnatDefaultSchemaTypes::XSI_SCAN);
+  QList<ctkXnatObject*> scans;
+  
+  try
+  {
+    scans = session->httpResults(scansQueryId,
+				 ctkXnatDefaultSchemaTypes::XSI_SCAN);
+  }
+  catch (const ctkException& e)
+  {
+    qWarning() << QString(e.what());
+  }
 
 
   if (!scans.isEmpty())
   if (!scans.isEmpty())
   {
   {
@@ -93,9 +104,17 @@ void ctkXnatExperiment::fetchImpl()
   QString reconstructionsUri = this->resourceUri() + "/reconstructions";
   QString reconstructionsUri = this->resourceUri() + "/reconstructions";
   QUuid reconstructionsQueryId = session->httpGet(reconstructionsUri);
   QUuid reconstructionsQueryId = session->httpGet(reconstructionsUri);
 
 
-  QList<ctkXnatObject*> reconstructions = session->httpResults(reconstructionsQueryId,
-                                                               ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION);
-
+  QList<ctkXnatObject*> reconstructions;
+  try
+  {
+    reconstructions = session->httpResults(reconstructionsQueryId,
+					   ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION);
+  }
+  catch (const ctkException& e)
+  {
+    qWarning() << QString(e.what());
+  }
+  
   if (!reconstructions.isEmpty())
   if (!reconstructions.isEmpty())
   {
   {
     ctkXnatReconstructionFolder* reconstructionFolder = new ctkXnatReconstructionFolder();
     ctkXnatReconstructionFolder* reconstructionFolder = new ctkXnatReconstructionFolder();
@@ -104,9 +123,18 @@ void ctkXnatExperiment::fetchImpl()
 
 
   QString assessorsUri = this->resourceUri() + "/assessors";
   QString assessorsUri = this->resourceUri() + "/assessors";
   QUuid assessorsQueryId = session->httpGet(assessorsUri);
   QUuid assessorsQueryId = session->httpGet(assessorsUri);
-
-  QList<ctkXnatObject*> assessors = session->httpResults(assessorsQueryId,
-							 ctkXnatDefaultSchemaTypes::XSI_ASSESSOR);
+  
+  QList<ctkXnatObject*> assessors;
+  
+  try
+  {
+    assessors = session->httpResults(assessorsQueryId,
+				     ctkXnatDefaultSchemaTypes::XSI_ASSESSOR);
+  }
+  catch (const ctkException& e)
+  {
+    qWarning() << QString(e.what());
+  }
 
 
   if (!assessors.isEmpty())
   if (!assessors.isEmpty())
   {
   {