diff options
-rw-r--r-- | .bzrignore | 3 | ||||
-rw-r--r-- | client/mysqltest.c | 8 | ||||
-rw-r--r-- | mysql-test/Makefile.am | 7 | ||||
-rw-r--r-- | mysql-test/lib/mtr_process.pl | 39 | ||||
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 10 |
5 files changed, 47 insertions, 20 deletions
diff --git a/.bzrignore b/.bzrignore index 0e0546e68c3..8e65ec6d6b8 100644 --- a/.bzrignore +++ b/.bzrignore @@ -696,6 +696,7 @@ mysql-test/*.ds? mysql-test/*.vcproj mysql-test/gmon.out mysql-test/install_test_db +mysql-test/lib/init_db.sql mysql-test/mtr mysql-test/mysql-test-run mysql-test/mysql-test-run-shell @@ -1098,6 +1099,7 @@ scripts/mysql_explain_log scripts/mysql_find_rows scripts/mysql_fix_extensions scripts/mysql_fix_privilege_tables +scripts/mysql_fix_privilege_tables.sql scripts/mysql_install_db scripts/mysql_secure_installation scripts/mysql_setpermission @@ -1335,4 +1337,3 @@ win/vs71cache.txt win/vs8cache.txt zlib/*.ds? zlib/*.vcproj -scripts/mysql_fix_privilege_tables.sql diff --git a/client/mysqltest.c b/client/mysqltest.c index edcfa06359e..a53b09558ca 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -60,6 +60,11 @@ # endif #endif +/* Use cygwin for --exec and --system before 5.0 */ +#if MYSQL_VERSION_ID < 50000 +#define USE_CYGWIN +#endif + #define MAX_VAR_NAME_LENGTH 256 #define MAX_COLUMNS 256 #define MAX_EMBEDDED_SERVER_ARGS 64 @@ -5356,8 +5361,9 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command, /* If we got here the statement succeeded and was expected to do so, get data. Note that this can still give errors found during execution! + Store the result of the query if if will return any fields */ - if (mysql_stmt_store_result(stmt)) + if (mysql_stmt_field_count(stmt) && mysql_stmt_store_result(stmt)) { handle_error(command, mysql_stmt_errno(stmt), mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt), ds); diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index d48b8c7dfe4..a52eb4753c8 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -34,7 +34,7 @@ benchdir_root= $(prefix) testdir = $(benchdir_root)/mysql-test EXTRA_SCRIPTS = mysql-test-run-shell.sh install_test_db.sh valgrind.supp $(PRESCRIPTS) EXTRA_DIST = $(EXTRA_SCRIPTS) -GENSCRIPTS = mysql-test-run-shell mysql-test-run install_test_db mtr +GENSCRIPTS = mysql-test-run-shell mysql-test-run install_test_db mtr lib/init_db.sql PRESCRIPTS = mysql-test-run.pl test_SCRIPTS = $(GENSCRIPTS) $(PRESCRIPTS) test_DATA = std_data/client-key.pem \ @@ -123,6 +123,11 @@ mysql-test-run: $(RM) -f mysql-test-run $(LN_S) mysql-test-run.pl mysql-test-run +# Build init_db.sql by executing mysql_create_system_tables +lib/init_db.sql: + $(top_builddir)/scripts/mysql_create_system_tables \ + test . \@HOSTNAME\@ > lib/init_db.sql + SUFFIXES = .sh .sh: diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl index f63009cd24c..690ca8313dd 100644 --- a/mysql-test/lib/mtr_process.pl +++ b/mysql-test/lib/mtr_process.pl @@ -22,7 +22,7 @@ use Socket; use Errno; use strict; -use POSIX 'WNOHANG'; +use POSIX qw(WNOHANG SIGHUP); sub mtr_run ($$$$$$;$); sub mtr_spawn ($$$$$$;$); @@ -139,19 +139,18 @@ sub spawn_impl ($$$$$$$$) { { if ( $! == $!{EAGAIN} ) # See "perldoc Errno" { - mtr_debug("Got EAGAIN from fork(), sleep 1 second and redo"); + mtr_warning("Got EAGAIN from fork(), sleep 1 second and redo"); sleep(1); redo FORK; } - else - { - mtr_error("$path ($pid) can't be forked"); - } + + mtr_error("$path ($pid) can't be forked, error: $!"); + } if ( $pid ) { - spawn_parent_impl($pid,$mode,$path); + return spawn_parent_impl($pid,$mode,$path); } else { @@ -216,8 +215,11 @@ sub spawn_impl ($$$$$$$$) { { mtr_child_error("failed to execute \"$path\": $!"); } + mtr_error("Should never come here 1!"); } + mtr_error("Should never come here 2!"); } + mtr_error("Should never come here 3!"); } @@ -230,12 +232,21 @@ sub spawn_parent_impl { { if ( $mode eq 'run' ) { - # Simple run of command, we wait for it to return + # Simple run of command, wait blocking for it to return my $ret_pid= waitpid($pid,0); if ( $ret_pid != $pid ) { - mtr_error("waitpid($pid, 0) returned $ret_pid " . - "when waiting for '$path'"); + # The "simple" waitpid has failed, print debug info + # and try to handle the error + mtr_warning("waitpid($pid, 0) returned $ret_pid " . + "when waiting for '$path', error: '$!'"); + if ( $ret_pid == -1 ) + { + # waitpid returned -1, that would indicate the process + # no longer exist and waitpid couldn't wait for it. + return 1; + } + mtr_error("Error handling failed"); } return mtr_process_exit_status($?); @@ -1109,12 +1120,6 @@ sub mtr_kill_processes ($) { # ############################################################################## -# FIXME something is wrong, we sometimes terminate with "Hangup" written -# to tty, and no STDERR output telling us why. - -# FIXME for some reason, setting HUP to 'IGNORE' will cause exit() to -# write out "Hangup", and maybe loose some output. We insert a sleep... - sub mtr_exit ($) { my $code= shift; mtr_timer_stop_all($::glob_timers); @@ -1126,7 +1131,7 @@ sub mtr_exit ($) { # set ourselves as the group leader at startup (with # POSIX::setpgrp(0,0)), but then care must be needed to always do # proper child process cleanup. - kill('HUP', -$$) if !$::glob_win32_perl and $$ == getpgrp(); + POSIX::kill(SIGHUP, -$$) if !$::glob_win32_perl and $$ == getpgrp(); exit($code); } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 9be2baea63d..a04ace73bc1 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -2121,6 +2121,16 @@ sub remove_stale_vardir () { mtr_verbose("Removing $opt_vardir/"); rmtree("$opt_vardir/"); } + + if ( $opt_mem ) + { + # A symlink from var/ to $opt_mem will be set up + # remove the $opt_mem dir to assure the symlink + # won't point at an old directory + mtr_verbose("Removing $opt_mem"); + rmtree($opt_mem); + } + } else { |