[svn-commits] seanbright: branch seanbright/cdr-tds-conversion r124834 - /team/seanbright/c...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jun 23 22:23:29 CDT 2008


Author: seanbright
Date: Mon Jun 23 22:23:29 2008
New Revision: 124834

URL: http://svn.digium.com/view/asterisk?view=rev&rev=124834
Log:
A little bit of reorganization and consolidation.

Modified:
    team/seanbright/cdr-tds-conversion/cdr/cdr_tds.c

Modified: team/seanbright/cdr-tds-conversion/cdr/cdr_tds.c
URL: http://svn.digium.com/view/asterisk/team/seanbright/cdr-tds-conversion/cdr/cdr_tds.c?view=diff&rev=124834&r1=124833&r2=124834
==============================================================================
--- team/seanbright/cdr-tds-conversion/cdr/cdr_tds.c (original)
+++ team/seanbright/cdr-tds-conversion/cdr/cdr_tds.c Mon Jun 23 22:23:29 2008
@@ -102,7 +102,7 @@
 static int mssql_connect(void);
 static int mssql_disconnect(void);
 
-static void cdr_tds_config_destroy(void);
+static void tds_config_free(void);
 
 static int tds_log(struct ast_cdr *cdr)
 {
@@ -331,13 +331,15 @@
 	return 0;
 }
 
-static void cdr_tds_config_destroy(void)
-{
-	if (settings) {
-		ast_mutex_destroy(&settings->lock);
-		ast_string_field_free_memory(settings);
-		ast_free(settings);
-	}
+static void tds_config_free(void)
+{
+	if (!settings) {
+		return;
+	}
+
+	ast_mutex_destroy(&settings->lock);
+	ast_string_field_free_memory(settings);
+	ast_free(settings);
 }
 
 static int tds_unload_module(void)
@@ -348,7 +350,7 @@
 		ast_mutex_unlock(&settings->lock);
 	}
 
-	cdr_tds_config_destroy();
+	tds_config_free();
 	ast_cdr_unregister(name);
 
 	dbexit();
@@ -414,6 +416,7 @@
 				settings = NULL;
 			}
 			ast_config_destroy(cfg);
+			dbexit();
 			return 0;
 		}
 
@@ -427,10 +430,7 @@
 		ast_string_field_set(settings, hostname, ptr);
 	} else {
 		ast_log(LOG_ERROR, "Failed to connect: Database server hostname not specified.\n");
-		ast_mutex_unlock(&settings->lock);
-		cdr_tds_config_destroy();
-		ast_config_destroy(cfg);
-		return 0;
+		goto failed;
 	}
 
 	ptr = ast_variable_retrieve(cfg, "global", "dbname");
@@ -438,10 +438,7 @@
 		ast_string_field_set(settings, database, ptr);
 	} else {
 		ast_log(LOG_ERROR, "Failed to connect: Database dbname not specified.\n");
-		ast_mutex_unlock(&settings->lock);
-		cdr_tds_config_destroy();
-		ast_config_destroy(cfg);
-		return 0;
+		goto failed;
 	}
 
 	ptr = ast_variable_retrieve(cfg, "global", "user");
@@ -449,10 +446,7 @@
 		ast_string_field_set(settings, username, ptr);
 	} else {
 		ast_log(LOG_ERROR, "Failed to connect: Database dbuser not specified.\n");
-		ast_mutex_unlock(&settings->lock);
-		cdr_tds_config_destroy();
-		ast_config_destroy(cfg);
-		return 0;
+		goto failed;
 	}
 
 	ptr = ast_variable_retrieve(cfg, "global", "password");
@@ -460,10 +454,7 @@
 		ast_string_field_set(settings, password, ptr);
 	} else {
 		ast_log(LOG_ERROR, "Failed to connect: Database password not specified.\n");
-		ast_mutex_unlock(&settings->lock);
-		cdr_tds_config_destroy();
-		ast_config_destroy(cfg);
-		return 0;
+		goto failed;
 	}
 
 	ptr = ast_variable_retrieve(cfg, "global", "charset");
@@ -493,7 +484,7 @@
 	mssql_disconnect();
 
 	if (mssql_connect()) {
-		/* We failed to connect (mssql_connect) takes care of logging it. */
+		/* We failed to connect (mssql_connect takes care of logging it) */
 		ast_mutex_unlock(&settings->lock);
 		return 0;
 	}
@@ -501,6 +492,16 @@
 	ast_mutex_unlock(&settings->lock);
 
 	return 1;
+
+failed:
+	ast_mutex_unlock(&settings->lock);
+	tds_config_free();
+	ast_config_destroy(cfg);
+	if (!reload) {
+		dbexit();
+	}
+
+	return 0;
 }
 
 static int reload(void)




More information about the svn-commits mailing list