From 2d337f68638cbc28870fbe270444f31f08e839e7 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@llnl.gov>
Date: Wed, 9 Apr 2008 19:37:48 +0000
Subject: [PATCH] ok fixed memory leak

---
 src/database/mysql_common.c | 40 ++++++++++++++++++++-----------------
 src/database/mysql_common.h |  3 +--
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/src/database/mysql_common.c b/src/database/mysql_common.c
index eb61f7c58ee..3d7db2c8bac 100644
--- a/src/database/mysql_common.c
+++ b/src/database/mysql_common.c
@@ -114,23 +114,15 @@ static int _mysql_make_table_current(MYSQL *mysql_db, char *table_name,
 	return SLURM_SUCCESS;
 }
 
-extern int *destroy_mysql_db_info(mysql_db_info_t *db_info)
-{
-	if(db_info) {
-		xfree(db_info->host);
-		xfree(db_info->user);
-		xfree(db_info->pass);
-		xfree(db_info);
-	}
-	return SLURM_SUCCESS;
-}
-
-extern int mysql_create_db(MYSQL *mysql_db, char *db_name,
-			   mysql_db_info_t *db_info)
+static int _create_db(char *db_name, mysql_db_info_t *db_info)
 {
 	char create_line[50];
+	MYSQL *mysql_db = NULL;
 
-	slurm_mutex_lock(&mysql_lock);
+//	slurm_mutex_lock(&mysql_lock);
+	if(!(mysql_db = mysql_init(mysql_db)))
+		fatal("mysql_init failed: %s", mysql_error(mysql_db));
+	
 	if(mysql_real_connect(mysql_db, db_info->host, db_info->user,
 			      db_info->pass, NULL, db_info->port, NULL, 0)) {
 		snprintf(create_line, sizeof(create_line),
@@ -140,17 +132,30 @@ extern int mysql_create_db(MYSQL *mysql_db, char *db_name,
 			      mysql_errno(mysql_db),
 			      mysql_error(mysql_db), create_line);
 		}
+		mysql_close(mysql_db);
+		mysql_server_end();				
 	} else {
 		info("Connection failed to host = %s "
 		     "user = %s pass = %s port = %u",
 		     db_info->host, db_info->user,
 		     db_info->pass, db_info->port);
 		slurm_mutex_unlock(&mysql_lock);
-		fatal("mysql_real_connect failed: %d %s",
+		fatal("mysql_real_connect failed: %d %s\n",
 		      mysql_errno(mysql_db),
 		      mysql_error(mysql_db));
 	}
-	slurm_mutex_unlock(&mysql_lock);
+//	slurm_mutex_unlock(&mysql_lock);
+	return SLURM_SUCCESS;
+}
+
+extern int *destroy_mysql_db_info(mysql_db_info_t *db_info)
+{
+	if(db_info) {
+		xfree(db_info->host);
+		xfree(db_info->user);
+		xfree(db_info->pass);
+		xfree(db_info);
+	}
 	return SLURM_SUCCESS;
 }
 
@@ -178,8 +183,7 @@ extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name,
 				if(mysql_errno(*mysql_db) == ER_BAD_DB_ERROR) {
 					debug("Database %s not created.  "
 					      "Creating", db_name);
-					mysql_create_db(*mysql_db, db_name,
-							db_info);
+					_create_db(db_name, db_info);
 				} else {
 					fatal("mysql_real_connect failed: "
 					      "%d %s",
diff --git a/src/database/mysql_common.h b/src/database/mysql_common.h
index 2b5a6b777ef..b34d0942c4b 100644
--- a/src/database/mysql_common.h
+++ b/src/database/mysql_common.h
@@ -76,8 +76,7 @@ extern pthread_mutex_t mysql_lock;
 
 extern int *destroy_mysql_db_info(mysql_db_info_t *db_info);
 
-extern int mysql_create_db(MYSQL *mysql_db, char *db_name,
-			   mysql_db_info_t *db_info);
+extern int mysql_create_db(char *db_name, mysql_db_info_t *db_info);
 
 extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name,
 				   mysql_db_info_t *db_info);
-- 
GitLab