summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsasha@mysql.sashanet.com <>2000-11-15 16:12:11 -0700
committersasha@mysql.sashanet.com <>2000-11-15 16:12:11 -0700
commit5faab668f7996ae58f645a2b563f5c290d37b76c (patch)
tree0ec2b6001248453903660cc4385ee83d69021683
parentf2b9a60ec44261352423c6c38bc0092524c7e772 (diff)
downloadmariadb-git-5faab668f7996ae58f645a2b563f5c290d37b76c.tar.gz
sql/slave.cc
fixed bug - mutex was not being released if master.info could not be read
-rw-r--r--sql/slave.cc19
1 files changed, 15 insertions, 4 deletions
diff --git a/sql/slave.cc b/sql/slave.cc
index d0128996832..0febb672624 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -358,7 +358,10 @@ int init_master_info(MASTER_INFO* mi)
{
file = my_fopen(fname, O_CREAT|O_RDWR|O_BINARY, MYF(MY_WME));
if(!file)
- return 1;
+ {
+ pthread_mutex_unlock(&mi->lock);
+ return 1;
+ }
mi->log_file_name[0] = 0;
mi->pos = 4; // skip magic number
mi->file = file;
@@ -373,18 +376,25 @@ int init_master_info(MASTER_INFO* mi)
mi->connect_retry = master_connect_retry;
if(flush_master_info(mi))
- return 1;
+ {
+ pthread_mutex_unlock(&mi->lock);
+ return 1;
+ }
}
else
{
file = my_fopen(fname, O_RDWR|O_BINARY, MYF(MY_WME));
if(!file)
- return 1;
+ {
+ pthread_mutex_unlock(&mi->lock);
+ return 1;
+ }
if(!fgets(mi->log_file_name, sizeof(mi->log_file_name), file))
{
sql_print_error("Error reading log file name from master info file ");
- return 1;
+ pthread_mutex_unlock(&mi->lock);
+ return 1;
}
*(strend(mi->log_file_name) - 1) = 0; // kill \n
@@ -392,6 +402,7 @@ int init_master_info(MASTER_INFO* mi)
if(!fgets(buf, sizeof(buf), file))
{
sql_print_error("Error reading log file position from master info file");
+ pthread_mutex_unlock(&mi->lock);
return 1;
}