From 7be42b8f95d53a4d036707c21ba3bcfd2424bcdf Mon Sep 17 00:00:00 2001
From: unknown <sasha@mysql.sashanet.com>
Date: Sat, 9 Sep 2000 21:31:23 -0600
Subject: [PATCH] CHANGE MASTER TO coredumped when the slave was initially
 started masterless

sql/slave.cc:
  fixed coredump in CHANGE MASTER TO
sql/sql_parse.cc:
  fixed coredump in CHANGE MASTER TO
---
 sql/slave.cc     | 4 ++--
 sql/sql_parse.cc | 8 ++++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/sql/slave.cc b/sql/slave.cc
index 2f4f7c10714..13b9acf1e78 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -40,7 +40,7 @@ extern bool opt_log_slave_updates ;
 
 static inline bool slave_killed(THD* thd);
 static int init_slave_thread(THD* thd);
-static int init_master_info(MASTER_INFO* mi);
+int init_master_info(MASTER_INFO* mi);
 static void safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi);
 static void safe_reconnect(THD* thd, MYSQL* mysql, MASTER_INFO* mi);
 static int safe_sleep(THD* thd, int sec);
@@ -249,7 +249,7 @@ int fetch_nx_table(THD* thd, MASTER_INFO* mi)
   return error;
 }
 
-static int init_master_info(MASTER_INFO* mi)
+int init_master_info(MASTER_INFO* mi)
 {
   FILE* file;
   MY_STAT stat_area;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 007e90e7ec0..c3aa5c1512f 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -52,6 +52,7 @@ static int change_master(THD* thd);
 static void reset_slave();
 static void reset_master();
 
+extern int init_master_info(MASTER_INFO* mi);
 
 static const char *any_db="*any*";	// Special symbol for check_access
 
@@ -2462,7 +2463,7 @@ static int start_slave(THD* thd , bool net_report)
     return 1;
   pthread_mutex_lock(&LOCK_slave);
   if(!slave_running)
-    if(master_host)
+    if(glob_mi.inited && glob_mi.host)
       {
 	pthread_t hThread;
 	if(pthread_create(&hThread, &connection_attrib, handle_slave, 0))
@@ -2471,7 +2472,7 @@ static int start_slave(THD* thd , bool net_report)
 	  }
       }
     else
-      err = "Master host not set";
+      err = "Master host not set or master info not initialized";
   else
     err =  "Slave already running";
 
@@ -2557,6 +2558,9 @@ static int change_master(THD* thd)
   thd->proc_info = "changing master";
   LEX_MASTER_INFO* lex_mi = &thd->lex.mi;
 
+  if(!glob_mi.inited)
+    init_master_info(&glob_mi);
+  
   pthread_mutex_lock(&glob_mi.lock);
   if((lex_mi->host || lex_mi->port) && !lex_mi->log_file_name && !lex_mi->pos)
     {
-- 
2.30.9