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