summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/mysql.cc6
-rw-r--r--client/mysqladmin.cc17
-rw-r--r--client/mysqlbinlog.cc26
-rw-r--r--client/mysqlcheck.c2
-rw-r--r--client/mysqlimport.c20
-rw-r--r--client/mysqltest.cc4
6 files changed, 44 insertions, 31 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 5debadee26c..1074a7aaaed 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1786,11 +1786,13 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
break;
case 'V':
usage(1);
- exit(0);
+ status.exit_status= 0;
+ mysql_end(-1);
case 'I':
case '?':
usage(0);
- exit(0);
+ status.exit_status= 0;
+ mysql_end(-1);
}
return 0;
}
diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc
index 463ec37fae2..4a691ff4e14 100644
--- a/client/mysqladmin.cc
+++ b/client/mysqladmin.cc
@@ -301,20 +301,17 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
int main(int argc,char *argv[])
{
- int error= 0, ho_error;
+ int error= 0;
MYSQL mysql;
char **commands, **save_argv;
MY_INIT(argv[0]);
mysql_init(&mysql);
- if (load_defaults("my",load_default_groups,&argc,&argv))
- exit(1);
+ if ((error= load_defaults("my",load_default_groups,&argc,&argv)))
+ goto err1;
save_argv = argv; /* Save for free_defaults */
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
- {
- free_defaults(save_argv);
- exit(ho_error);
- }
+ if ((error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+ goto err2;
if (debug_info_flag)
my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO;
if (debug_check_flag)
@@ -463,6 +460,7 @@ int main(int argc,char *argv[])
} /* got connection */
mysql_close(&mysql);
+err2:
mysql_library_end();
my_free(opt_password);
my_free(user);
@@ -470,8 +468,9 @@ int main(int argc,char *argv[])
my_free(shared_memory_base_name);
#endif
free_defaults(save_argv);
+err1:
my_end(my_end_arg);
- exit(error ? 1 : 0);
+ exit(error);
return 0;
}
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 4de571b546d..8869c3ac81b 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -45,7 +45,7 @@
#include "mysqld.h"
-Rpl_filter *binlog_filter;
+Rpl_filter *binlog_filter= 0;
#define BIN_LOG_HEADER_SIZE 4
#define PROBE_HEADER_LEN (EVENT_LEN_OFFSET+4)
@@ -77,7 +77,7 @@ static void error(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
static void warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0;
-static bool opt_hexdump= 0;
+static bool opt_hexdump= 0, opt_version= 0;
const char *base64_output_mode_names[]=
{"NEVER", "AUTO", "ALWAYS", "UNSPEC", "DECODE-ROWS", NullS};
TYPELIB base64_output_mode_typelib=
@@ -1430,6 +1430,7 @@ static void cleanup()
my_free(user);
my_free(const_cast<char*>(dirname_for_local_load));
+ delete binlog_filter;
delete glob_description_event;
if (mysql)
mysql_close(mysql);
@@ -1588,10 +1589,12 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
break;
case 'V':
print_version();
- exit(0);
+ opt_version= 1;
+ break;
case '?':
usage();
- exit(0);
+ opt_version= 1;
+ break;
}
if (tty_password)
pass= get_tty_password(NullS);
@@ -2303,24 +2306,26 @@ int main(int argc, char** argv)
my_init_time(); // for time functions
init_alloc_root(&s_mem_root, 16384, 0);
+ if (load_defaults("my", load_groups, &argc, &argv))
+ exit(1);
+
if (!(binlog_filter= new Rpl_filter))
{
error("Failed to create Rpl_filter");
exit(1);
}
- if (load_defaults("my", load_groups, &argc, &argv))
- exit(1);
-
defaults_argv= argv;
parse_args(&argc, (char***)&argv);
- if (!argc)
+ if (!argc || opt_version)
{
- usage();
+ if (!argc)
+ usage();
+ cleanup();
free_defaults(defaults_argv);
my_end(my_end_arg);
- exit(1);
+ exit(!opt_version);
}
if (opt_base64_output_mode == BASE64_OUTPUT_UNSPEC)
@@ -2407,7 +2412,6 @@ int main(int argc, char** argv)
my_fclose(result_file, MYF(0));
cleanup();
free_annotate_event();
- delete binlog_filter;
free_root(&s_mem_root, MYF(0));
free_defaults(defaults_argv);
my_free_open_file_info();
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c
index 445f4522cef..68456d59041 100644
--- a/client/mysqlcheck.c
+++ b/client/mysqlcheck.c
@@ -961,6 +961,7 @@ static void safe_exit(int error)
DBUG_VOID_RETURN;
if (sock)
mysql_close(sock);
+ sf_leaking_memory= 1; /* don't check for memory leaks */
exit(error);
DBUG_VOID_RETURN;
}
@@ -972,7 +973,6 @@ int main(int argc, char **argv)
char **defaults_argv;
MY_INIT(argv[0]);
- mysql_library_init(-1, 0, 0);
/*
** Check out the args
*/
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index 3b9939d7c6d..fabec74052d 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -62,6 +62,8 @@ static char *opt_plugin_dir= 0, *opt_default_auth= 0;
static longlong opt_ignore_lines= -1;
#include <sslopt-vars.h>
+static char **argv_to_free;
+
#ifdef HAVE_SMEM
static char *shared_memory_base_name=0;
#endif
@@ -475,10 +477,18 @@ static void db_disconnect(char *host, MYSQL *mysql)
static void safe_exit(int error, MYSQL *mysql)
{
- if (ignore_errors)
+ if (error && ignore_errors)
return;
if (mysql)
mysql_close(mysql);
+
+#ifdef HAVE_SMEM
+ my_free(shared_memory_base_name);
+#endif
+ free_defaults(argv_to_free);
+ mysql_library_end();
+ my_free(opt_password);
+ my_end(my_end_arg);
exit(error);
}
@@ -597,7 +607,6 @@ error:
int main(int argc, char **argv)
{
int error=0;
- char **argv_to_free;
MY_INIT(argv[0]);
if (load_defaults("my",load_default_groups,&argc,&argv))
@@ -687,11 +696,6 @@ int main(int argc, char **argv)
exitcode= error;
db_disconnect(current_host, mysql);
}
- my_free(opt_password);
-#ifdef HAVE_SMEM
- my_free(shared_memory_base_name);
-#endif
- free_defaults(argv_to_free);
- my_end(my_end_arg);
+ safe_exit(0, 0);
return(exitcode);
}
diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index 386577a4224..89e74a56bfc 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -1394,6 +1394,7 @@ static void cleanup_and_exit(int exit_code)
}
}
+ sf_leaking_memory= 0; /* all memory should be freed by now */
exit(exit_code);
}
@@ -8462,6 +8463,9 @@ int main(int argc, char **argv)
MY_INIT(argv[0]);
DBUG_ENTER("main");
+ /* mysqltest has no way to free all its memory correctly */
+ sf_leaking_memory= 1;
+
save_file[0]= 0;
TMPDIR[0]= 0;