Commit d6afdcb7 authored by unknown's avatar unknown
Browse files

mysql-test-run.pl:

  Enabled --valgrind to work (bug#13280)


mysql-test/mysql-test-run.pl:
  Enabled --valgrind to work (bug#13280)
parent 2a5505c7
Loading
Loading
Loading
Loading
+73 −49
Original line number Diff line number Diff line
@@ -237,8 +237,10 @@ our $opt_ps_protocol;

our $opt_sleep_time_after_restart=  1;
our $opt_sleep_time_for_delete=    10;
our $opt_testcase_timeout=          5; # 5 min max
our $opt_suite_timeout=           120; # 2 hours max
our $opt_testcase_timeout;
our $opt_suite_timeout;
my  $default_testcase_timeout=     10; # 10 min max
my  $default_suite_timeout=       120; # 2 hours max

our $opt_socket;

@@ -509,8 +511,8 @@ sub command_line_setup () {
             # Coverage, profiling etc
             'gcov'                     => \$opt_gcov,
             'gprof'                    => \$opt_gprof,
             'valgrind'                 => \$opt_valgrind,
             'valgrind-all'             => \$opt_valgrind_all,
             'valgrind:s'               => \$opt_valgrind,
             'valgrind-all:s'           => \$opt_valgrind_all,
             'valgrind-options=s'       => \$opt_valgrind_options,

             # Misc
@@ -688,29 +690,36 @@ sub command_line_setup () {
    $opt_with_ndbcluster= 0;
  }

  # FIXME
  # The ":s" in the argument spec, means we have three different cases
  #
  #   undefined    option not set
  #   ""           option set with no argument
  #   "somestring" option is name/path of valgrind executable

  #if ( $opt_valgrind or $opt_valgrind_all )
  #{
    # VALGRIND=`which valgrind` # this will print an error if not found FIXME
    # Give good warning to the user and stop
  #  if ( ! $VALGRIND )
  #  {
  #    print "You need to have the 'valgrind' program in your PATH to run mysql-test-run with option --valgrind. Valgrind's home page is http://valgrind.kde.org.\n"
  #    exit 1
  #  }
  if ( defined $opt_valgrind_all and ! $opt_valgrind )
  {
    $opt_valgrind= $opt_valgrind_all;
  }

  if ( ! $opt_testcase_timeout )
  {
    $opt_testcase_timeout= $default_testcase_timeout;
    $opt_testcase_timeout*= 10 if defined $opt_valgrind;
  }

  if ( ! $opt_suite_timeout )
  {
    $opt_suite_timeout= $default_suite_timeout;
    $opt_suite_timeout*= 4 if defined $opt_valgrind;
  }

  if ( defined $opt_valgrind )
  {
    $opt_sleep_time_after_restart= 10;
    $opt_sleep_time_for_delete= 60;
    # >=2.1.2 requires the --tool option, some versions write to stdout, some to stderr
    #  valgrind --help 2>&1 | grep "\-\-tool" > /dev/null && VALGRIND="$VALGRIND --tool=memcheck"
  #  VALGRIND="$VALGRIND --alignment=8 --leak-check=yes --num-callers=16"
  #  $opt_extra_mysqld_opt.= " --skip-safemalloc --skip-bdb";
  #  SLEEP_TIME_AFTER_RESTART=10
  #  $opt_sleep_time_for_delete=  60
  #  $glob_use_running_server= ""
  #  if ( "$1"=  "--valgrind-all" )
  #  {
  #    VALGRIND="$VALGRIND -v --show-reachable=yes"
  #  }
  #}
  }

  if ( ! $opt_user )
  {
@@ -1703,7 +1712,7 @@ sub mysqld_arguments ($$$$$) {
  mtr_add_arg($args, "%s--language=%s", $prefix, $path_language);
  mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);

  if ( $opt_valgrind )
  if ( defined $opt_valgrind )
  {
    mtr_add_arg($args, "%s--skip-safemalloc", $prefix);
    mtr_add_arg($args, "%s--skip-bdb", $prefix);
@@ -1928,29 +1937,9 @@ sub mysqld_start ($$$$) {

  mtr_init_args(\$args);

  if ( $opt_valgrind )
  if ( defined $opt_valgrind )
  {

    mtr_add_arg($args, "--tool=memcheck");
    mtr_add_arg($args, "--alignment=8");
    mtr_add_arg($args, "--leak-check=yes");
    mtr_add_arg($args, "--num-callers=16");

    if ( $opt_valgrind_all )
    {
      mtr_add_arg($args, "-v");
      mtr_add_arg($args, "--show-reachable=yes");
    }

    if ( $opt_valgrind_options )
    {
      # FIXME split earlier and put into @glob_valgrind_*
      mtr_add_arg($args, split(' ', $opt_valgrind_options));
    }

    mtr_add_arg($args, $exe);

    $exe=  $opt_valgrind;
    valgrind_arguments($args, \$exe);
  }

  mysqld_arguments($args,$type,$idx,$extra_opt,$slave_master_info);
@@ -2121,6 +2110,11 @@ sub run_mysqltest ($) {

  mtr_init_args(\$args);

  if ( defined $opt_valgrind )
  {
    valgrind_arguments($args, \$exe);
  }

  mtr_add_arg($args, "--no-defaults");
  mtr_add_arg($args, "--socket=%s", $master->[0]->{'path_mysock'});
  mtr_add_arg($args, "--database=test");
@@ -2205,6 +2199,34 @@ sub run_mysqltest ($) {
  return mtr_run_test($exe,$args,$tinfo->{'path'},"",$path_timefile,"");
}


sub valgrind_arguments {
  my $args= shift;
  my $exe=  shift;

  mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
  mtr_add_arg($args, "--alignment=8");
  mtr_add_arg($args, "--leak-check=yes");
  mtr_add_arg($args, "--num-callers=16");

  if ( defined $opt_valgrind_all )
  {
    mtr_add_arg($args, "-v");
    mtr_add_arg($args, "--show-reachable=yes");
  }

  if ( $opt_valgrind_options )
  {
    # FIXME split earlier and put into @glob_valgrind_*
    mtr_add_arg($args, split(' ', $opt_valgrind_options));
  }

  mtr_add_arg($args, $$exe);

  $$exe= $opt_valgrind || "valgrind";
}


##############################################################################
#
#  Usage
@@ -2271,7 +2293,9 @@ Options for coverage, profiling etc

  gcov                  FIXME
  gprof                 FIXME
  valgrind              FIXME
  valgrind[=exe]        Run the "mysqltest" executable as well as the "mysqld"
                        server using valgrind, optionally specifying the
                        executable path/name
  valgrind-all          FIXME
  valgrind-options=ARGS Extra options to give valgrind