diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/mysql.cc | 6 | ||||
-rw-r--r-- | client/mysqladmin.cc | 17 | ||||
-rw-r--r-- | client/mysqlbinlog.cc | 26 | ||||
-rw-r--r-- | client/mysqlcheck.c | 2 | ||||
-rw-r--r-- | client/mysqlimport.c | 20 | ||||
-rw-r--r-- | client/mysqltest.cc | 4 |
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; |