From 498ac50a550e2dc76a6c74768ab288534ee75b33 Mon Sep 17 00:00:00 2001
From: gscalamera <graziano.scalamera@elettra.eu>
Date: Fri, 4 Aug 2017 11:00:34 +0200
Subject: [PATCH] added try/catch when connecting to Tango DB to write device
 properties

---
 src/AlarmHandler.cpp | 72 ++++++++++++++++++++++++++++----------------
 1 file changed, 46 insertions(+), 26 deletions(-)

diff --git a/src/AlarmHandler.cpp b/src/AlarmHandler.cpp
index 13daae4..044ad83 100644
--- a/src/AlarmHandler.cpp
+++ b/src/AlarmHandler.cpp
@@ -275,26 +275,37 @@ void AlarmHandler::delete_device()
 	as << vs;
 	Tango::DbData	data_put;
 	data_put.push_back(as);
+	Tango::Database *db=NULL;
+	try
+	{
 #ifndef _USE_ELETTRA_DB_RW
-	Tango::Database *db = new Tango::Database();
-#else	
-	//salvataggio proprietà usando host_rw e port_rw per connettersi al database
-	Tango::Database *db;
-	if(host_rw != "")
-		db = new Tango::Database(host_rw,port_rw);
-	else
 		db = new Tango::Database();
+#else	
+		//salvataggio proprietà usando host_rw e port_rw per connettersi al database
+		if(host_rw != "")
+			db = new Tango::Database(host_rw,port_rw);
+		else
+			db = new Tango::Database();
 #endif
-	try {
-
-		db->put_device_property(get_name(), data_put);
 	}
 	catch(Tango::DevFailed &e)
 	{
-		ERROR_STREAM << __FUNCTION__<< " error saving properties='" << e.errors[0].desc << "'";
-	} 
-	delete db;
-	
+		stringstream o;
+		o << " Error connecting to Tango DataBase='" << e.errors[0].desc << "'";
+		WARN_STREAM << __FUNCTION__<< o.str();
+	}
+	if(db)
+	{
+		try {
+			db->put_device_property(get_name(), data_put);
+			DEBUG_STREAM << "AlarmHandler::delete_device(): saved AlarmStatus in properties!!" << endl;
+		}
+		catch(Tango::DevFailed &e)
+		{
+			ERROR_STREAM << __FUNCTION__<< " error saving properties='" << e.errors[0].desc << "'";
+		}
+		delete db;
+	}
 	/*
 	 * clear storage
 	 */
@@ -303,7 +314,7 @@ void AlarmHandler::delete_device()
 	delete internallock;
 	delete dslock;
 	delete events;
-	DEBUG_STREAM << "AlarmHandler::delete_device(): saved AlarmStatus in properties!!" << endl;
+
 	instanceCounter--;
 	//Tango::leavefunc();
 
@@ -389,22 +400,31 @@ void AlarmHandler::init_device()
 	
 #ifdef _USE_ELETTRA_DB_RW
 	host_rw = "";
-	Tango::Database *db = new Tango::Database();
+	Tango::Database *db=NULL;
 	try
 	{
-		Tango::DbData db_data;
-		db_data.push_back((Tango::DbDatum("Host")));
-		db_data.push_back((Tango::DbDatum("Port")));
-		db->get_property("Database",db_data);
- 
-		db_data[0] >> host_rw;
-		db_data[1] >> port_rw;
+		db = new Tango::Database();
 	}catch(Tango::DevFailed &e)
 	{
-		ERROR_STREAM << __FUNCTION__ << " Error reading Database property='" << e.errors[0].desc << "'";
+		ERROR_STREAM << __FUNCTION__ << " Error connecting to Tango DataBase='" << e.errors[0].desc << "'";
+	}
+	if(db)
+	{
+		try
+		{
+			Tango::DbData db_data;
+			db_data.push_back((Tango::DbDatum("Host")));
+			db_data.push_back((Tango::DbDatum("Port")));
+			db->get_property("Database",db_data);
+
+			db_data[0] >> host_rw;
+			db_data[1] >> port_rw;
+		}catch(Tango::DevFailed &e)
+		{
+			ERROR_STREAM << __FUNCTION__ << " Error reading Database property='" << e.errors[0].desc << "'";
+		}
+		delete db;
 	}
-
-	delete db;
 #endif
 
 	ds_num = 0;				//initialize number of lines returned by read_alarm
-- 
GitLab