Author: sayer
Date: 2009-10-22 21:59:22 +0200 (Thu, 22 Oct 2009)
New Revision: 1563

Modified:
   trunk/apps/dsm/DSM.cpp
   trunk/apps/dsm/DSM.h
Log:
prevent reloading existing DSM; saving old diagram collection (running calls)

Modified: trunk/apps/dsm/DSM.cpp
===================================================================
--- trunk/apps/dsm/DSM.cpp      2009-10-22 19:23:53 UTC (rev 1562)
+++ trunk/apps/dsm/DSM.cpp      2009-10-22 19:59:22 UTC (rev 1563)
@@ -99,6 +99,10 @@
   for (map<string, AmPromptCollection*>::iterator it=
         prompt_sets.begin(); it != prompt_sets.end(); it++)
     delete it->second;
+
+  for (vector<DSMStateDiagramCollection*>::iterator it=
+        old_diags.begin(); it != old_diags.end(); it++)
+    delete *it;
 }
 
 int DSMFactory::onLoad()
@@ -557,13 +561,10 @@
     }
   }
   diags_mut.lock();
-  DSMStateDiagramCollection* old_diags = diags;
+  old_diags.push_back(diags);
   diags = new_diags; 
   diags_mut.unlock();
 
-  DBG("deleting old diagram collection\n");
-  delete old_diags;
-
   ret.push(200);
   ret.push("DSMs reloaded");
 }
@@ -685,7 +686,7 @@
   if(cfg.loadFile(AmConfig::ModConfigPath + string(MOD_NAME ".conf"))) {
       ret.push(500);
       ret.push("loading config file " +AmConfig::ModConfigPath + 
string(MOD_NAME ".conf"));
-      return ;
+      return;
   }
 
   string DiagPath = cfg.getParameter("diag_path");
@@ -697,12 +698,17 @@
   string dsm_file_name = DiagPath+dsm_name+".dsm";
   string res = "OK";
   diags_mut.lock();
-  if (!diags->loadFile(dsm_file_name, dsm_name, ModPath, DebugDSM)) {
-    ret.push(500);
-    ret.push("error loading "+dsm_name+" from "+ dsm_file_name);
+  if (diags->hasDiagram(dsm_name)) {
+    ret.push(400);
+    ret.push("DSM named '" + dsm_name + "' already loaded (use reloadDSMs to 
reload all)");
   } else {
-    ret.push(200);
-    ret.push("loaded "+dsm_name+" from "+ dsm_file_name);
+    if (!diags->loadFile(dsm_file_name, dsm_name, ModPath, DebugDSM)) {
+      ret.push(500);
+      ret.push("error loading "+dsm_name+" from "+ dsm_file_name);
+    } else {
+      ret.push(200);
+      ret.push("loaded "+dsm_name+" from "+ dsm_file_name);
+    }
   }
   diags_mut.unlock();
 }
@@ -714,12 +720,17 @@
 
   string res = "OK";
   diags_mut.lock();
-  if (!diags->loadFile(diag_path+dsm_name+".dsm", dsm_name, mod_path, 
DebugDSM)) {
-    ret.push(500);
-    ret.push("error loading "+dsm_name+" from "+ diag_path+dsm_name+".dsm");
+  if (diags->hasDiagram(dsm_name)) {
+    ret.push(400);
+    ret.push("DSM named '" + dsm_name + "' already loaded (use reloadDSMs to 
reload all)");
   } else {
-    ret.push(200);
-    ret.push("loaded "+dsm_name+" from "+ diag_path+dsm_name+".dsm");
+    if (!diags->loadFile(diag_path+dsm_name+".dsm", dsm_name, mod_path, 
DebugDSM)) {
+      ret.push(500);
+      ret.push("error loading "+dsm_name+" from "+ diag_path+dsm_name+".dsm");
+    } else {
+      ret.push(200);
+      ret.push("loaded "+dsm_name+" from "+ diag_path+dsm_name+".dsm");
+    }
   }
   diags_mut.unlock();
 }

Modified: trunk/apps/dsm/DSM.h
===================================================================
--- trunk/apps/dsm/DSM.h        2009-10-22 19:23:53 UTC (rev 1562)
+++ trunk/apps/dsm/DSM.h        2009-10-22 19:59:22 UTC (rev 1563)
@@ -63,6 +63,8 @@
   DSMStateDiagramCollection* diags;
   AmMutex diags_mut;
 
+  vector<DSMStateDiagramCollection*> old_diags;
+
   static bool DebugDSM;
 
   static string InboundStartDiag;

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to