Loading client/mysqltest.c +32 −11 Original line number Diff line number Diff line Loading @@ -97,6 +97,10 @@ #define DEFAULT_DELIMITER ";" #define MAX_DELIMITER 16 #define RESULT_OK 0 #define RESULT_CONTENT_MISMATCH 1 #define RESULT_LENGTH_MISMATCH 2 enum {OPT_MANAGER_USER=256,OPT_MANAGER_HOST,OPT_MANAGER_PASSWD, OPT_MANAGER_PORT,OPT_MANAGER_WAIT_TIMEOUT, OPT_SKIP_SAFEMALLOC, OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT, OPT_SSL_CA, OPT_SSL_CAPATH, Loading Loading @@ -650,7 +654,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) { DBUG_PRINT("info",("Size differs: result size: %u file size: %u", ds->length, stat_info.st_size)); DBUG_RETURN(2); DBUG_RETURN(RESULT_LENGTH_MISMATCH); } if (!(tmp = (char*) my_malloc(stat_info.st_size + 1, MYF(MY_WME)))) die(NullS); Loading @@ -667,7 +671,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) res_ptr = res_ds.str; if ((res_len = res_ds.length) != ds->length) { res = 2; res= RESULT_LENGTH_MISMATCH; goto err; } } Loading @@ -677,7 +681,8 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) res_len = stat_info.st_size; } res = (memcmp(res_ptr, ds->str, res_len)) ? 1 : 0; res= (memcmp(res_ptr, ds->str, res_len)) ? RESULT_CONTENT_MISMATCH : RESULT_OK; err: if (res && eval_result) Loading @@ -694,21 +699,21 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) static int check_result(DYNAMIC_STRING* ds, const char *fname, my_bool require_option) { int error = 0; int error= RESULT_OK; int res= dyn_string_cmp(ds, fname); if (res && require_option) abort_not_supported_test(); switch (res) { case 0: case RESULT_OK: break; /* ok */ case 2: case RESULT_LENGTH_MISMATCH: verbose_msg("Result length mismatch"); error = 1; error= RESULT_LENGTH_MISMATCH; break; case 1: case RESULT_CONTENT_MISMATCH: verbose_msg("Result content mismatch"); error = 1; error= RESULT_CONTENT_MISMATCH; break; default: /* impossible */ die("Unknown error code from dyn_string_cmp()"); Loading Loading @@ -3738,8 +3743,9 @@ int main(int argc, char **argv) { int error = 0; struct st_query *q; my_bool require_file=0, q_send_flag=0; my_bool require_file=0, q_send_flag=0, query_executed= 0; char save_file[FN_REFLEN]; MY_STAT res_info; MY_INIT(argv[0]); { DBUG_ENTER("main"); Loading Loading @@ -3932,6 +3938,7 @@ int main(int argc, char **argv) save_file[0]=0; } error |= run_query(&cur_con->mysql, q, flags); query_executed= 1; q->last_argument= q->end; break; } Loading @@ -3952,6 +3959,7 @@ int main(int argc, char **argv) is given on this connection. */ error |= run_query(&cur_con->mysql, q, QUERY_SEND); query_executed= 1; q->last_argument= q->end; break; case Q_RESULT: Loading Loading @@ -3992,6 +4000,7 @@ int main(int argc, char **argv) break; case Q_EXEC: do_exec(q); query_executed= 1; break; case Q_START_TIMER: /* Overwrite possible earlier start of timer */ Loading Loading @@ -4048,6 +4057,18 @@ int main(int argc, char **argv) parser.current_line += current_line_inc; } if (!query_executed && result_file && my_stat(result_file, &res_info, 0)) { /* my_stat() successful on result file. Check if we have not run a single query, but we do have a result file that contains data. Note that we don't care, if my_stat() fails. For example for non-existing or non-readable file we assume it's fine to have no query output from the test file, e.g. regarded as no error. */ if (res_info.st_size) error|= (RESULT_CONTENT_MISMATCH | RESULT_LENGTH_MISMATCH); } if (result_file && ds_res.length && !error) { if (!record) Loading mysql-test/mysql-test-run.pl +16 −5 Original line number Diff line number Diff line Loading @@ -258,6 +258,7 @@ our $opt_user; our $opt_user_test; our $opt_valgrind; our $opt_valgrind_mysqltest; our $opt_valgrind_all; our $opt_valgrind_options; Loading Loading @@ -512,6 +513,7 @@ sub command_line_setup () { 'gcov' => \$opt_gcov, 'gprof' => \$opt_gprof, 'valgrind:s' => \$opt_valgrind, 'valgrind-mysqltest:s' => \$opt_valgrind_mysqltest, 'valgrind-all:s' => \$opt_valgrind_all, 'valgrind-options=s' => \$opt_valgrind_options, Loading Loading @@ -696,9 +698,15 @@ sub command_line_setup () { # "" option set with no argument # "somestring" option is name/path of valgrind executable if ( defined $opt_valgrind_all and ! $opt_valgrind ) # Take executable path from any of them, if any $opt_valgrind= $opt_valgrind_mysqltest if $opt_valgrind_mysqltest; $opt_valgrind= $opt_valgrind_all if $opt_valgrind_all; # If valgrind flag not defined, define if other valgrind flags are unless ( defined $opt_valgrind ) { $opt_valgrind= $opt_valgrind_all; $opt_valgrind= "" if defined $opt_valgrind_mysqltest or defined $opt_valgrind_all; } if ( ! $opt_testcase_timeout ) Loading Loading @@ -2110,7 +2118,7 @@ sub run_mysqltest ($) { mtr_init_args(\$args); if ( defined $opt_valgrind ) if ( defined $opt_valgrind_mysqltest ) { valgrind_arguments($args, \$exe); } Loading Loading @@ -2208,6 +2216,8 @@ sub valgrind_arguments { mtr_add_arg($args, "--alignment=8"); mtr_add_arg($args, "--leak-check=yes"); mtr_add_arg($args, "--num-callers=16"); mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir) if -f "$glob_mysql_test_dir/valgrind.supp"; if ( defined $opt_valgrind_all ) { Loading Loading @@ -2293,10 +2303,11 @@ Options for coverage, profiling etc gcov FIXME gprof FIXME valgrind[=exe] Run the "mysqltest" executable as well as the "mysqld" valgrind[=EXE] Run the "mysqltest" executable as well as the "mysqld" server using valgrind, optionally specifying the executable path/name valgrind-all FIXME valgrind-mysqltest[=EXE] In addition, run the "mysqltest" executable with valgrind valgrind-all[=EXE] Adds verbose flag, and --show-reachable to valgrind valgrind-options=ARGS Extra options to give valgrind Misc options Loading ndb/src/ndbapi/Ndbinit.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -296,7 +296,8 @@ NdbImpl::NdbImpl(Ndb_cluster_connection *ndb_cluster_connection, : m_ndb_cluster_connection(ndb_cluster_connection->m_impl), m_dictionary(ndb), theCurrentConnectIndex(0), theNdbObjectIdMap(1024,1024), theNdbObjectIdMap(ndb_cluster_connection->m_impl.m_transporter_facade->theMutexPtr, 1024,1024), theNoOfDBnodes(0) { int i; Loading ndb/src/ndbapi/ObjectMap.hpp +20 −13 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ class NdbObjectIdMap //: NdbLockable { public: STATIC_CONST( InvalidId = ~(Uint32)0 ); NdbObjectIdMap(Uint32 initalSize = 128, Uint32 expandSize = 10); NdbObjectIdMap(NdbMutex*, Uint32 initalSize = 128, Uint32 expandSize = 10); ~NdbObjectIdMap(); Uint32 map(void * object); Loading @@ -46,14 +46,16 @@ private: void * m_obj; } * m_map; NdbMutex * m_mutex; void expand(Uint32 newSize); }; inline NdbObjectIdMap::NdbObjectIdMap(Uint32 sz, Uint32 eSz) { NdbObjectIdMap::NdbObjectIdMap(NdbMutex* mutex, Uint32 sz, Uint32 eSz) { m_size = 0; m_firstFree = InvalidId; m_map = 0; m_mutex = mutex; m_expandSize = eSz; expand(sz); #ifdef DEBUG_OBJECTMAP Loading Loading @@ -131,13 +133,12 @@ NdbObjectIdMap::getObject(Uint32 id){ inline void NdbObjectIdMap::expand(Uint32 incSize){ NdbMutex_Lock(m_mutex); Uint32 newSize = m_size + incSize; MapEntry * tmp = (MapEntry*)malloc(newSize * sizeof(MapEntry)); MapEntry * tmp = (MapEntry*)realloc(m_map, newSize * sizeof(MapEntry)); if (m_map) { memcpy(tmp, m_map, m_size * sizeof(MapEntry)); free((void*)m_map); } if (likely(tmp != 0)) { m_map = tmp; for(Uint32 i = m_size; i<newSize; i++){ Loading @@ -147,5 +148,11 @@ NdbObjectIdMap::expand(Uint32 incSize){ m_map[newSize-1].m_next = InvalidId; m_size = newSize; } else { ndbout_c("NdbObjectIdMap::expand unable to expand!!"); } NdbMutex_Unlock(m_mutex); } #endif Loading
client/mysqltest.c +32 −11 Original line number Diff line number Diff line Loading @@ -97,6 +97,10 @@ #define DEFAULT_DELIMITER ";" #define MAX_DELIMITER 16 #define RESULT_OK 0 #define RESULT_CONTENT_MISMATCH 1 #define RESULT_LENGTH_MISMATCH 2 enum {OPT_MANAGER_USER=256,OPT_MANAGER_HOST,OPT_MANAGER_PASSWD, OPT_MANAGER_PORT,OPT_MANAGER_WAIT_TIMEOUT, OPT_SKIP_SAFEMALLOC, OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT, OPT_SSL_CA, OPT_SSL_CAPATH, Loading Loading @@ -650,7 +654,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) { DBUG_PRINT("info",("Size differs: result size: %u file size: %u", ds->length, stat_info.st_size)); DBUG_RETURN(2); DBUG_RETURN(RESULT_LENGTH_MISMATCH); } if (!(tmp = (char*) my_malloc(stat_info.st_size + 1, MYF(MY_WME)))) die(NullS); Loading @@ -667,7 +671,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) res_ptr = res_ds.str; if ((res_len = res_ds.length) != ds->length) { res = 2; res= RESULT_LENGTH_MISMATCH; goto err; } } Loading @@ -677,7 +681,8 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) res_len = stat_info.st_size; } res = (memcmp(res_ptr, ds->str, res_len)) ? 1 : 0; res= (memcmp(res_ptr, ds->str, res_len)) ? RESULT_CONTENT_MISMATCH : RESULT_OK; err: if (res && eval_result) Loading @@ -694,21 +699,21 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) static int check_result(DYNAMIC_STRING* ds, const char *fname, my_bool require_option) { int error = 0; int error= RESULT_OK; int res= dyn_string_cmp(ds, fname); if (res && require_option) abort_not_supported_test(); switch (res) { case 0: case RESULT_OK: break; /* ok */ case 2: case RESULT_LENGTH_MISMATCH: verbose_msg("Result length mismatch"); error = 1; error= RESULT_LENGTH_MISMATCH; break; case 1: case RESULT_CONTENT_MISMATCH: verbose_msg("Result content mismatch"); error = 1; error= RESULT_CONTENT_MISMATCH; break; default: /* impossible */ die("Unknown error code from dyn_string_cmp()"); Loading Loading @@ -3738,8 +3743,9 @@ int main(int argc, char **argv) { int error = 0; struct st_query *q; my_bool require_file=0, q_send_flag=0; my_bool require_file=0, q_send_flag=0, query_executed= 0; char save_file[FN_REFLEN]; MY_STAT res_info; MY_INIT(argv[0]); { DBUG_ENTER("main"); Loading Loading @@ -3932,6 +3938,7 @@ int main(int argc, char **argv) save_file[0]=0; } error |= run_query(&cur_con->mysql, q, flags); query_executed= 1; q->last_argument= q->end; break; } Loading @@ -3952,6 +3959,7 @@ int main(int argc, char **argv) is given on this connection. */ error |= run_query(&cur_con->mysql, q, QUERY_SEND); query_executed= 1; q->last_argument= q->end; break; case Q_RESULT: Loading Loading @@ -3992,6 +4000,7 @@ int main(int argc, char **argv) break; case Q_EXEC: do_exec(q); query_executed= 1; break; case Q_START_TIMER: /* Overwrite possible earlier start of timer */ Loading Loading @@ -4048,6 +4057,18 @@ int main(int argc, char **argv) parser.current_line += current_line_inc; } if (!query_executed && result_file && my_stat(result_file, &res_info, 0)) { /* my_stat() successful on result file. Check if we have not run a single query, but we do have a result file that contains data. Note that we don't care, if my_stat() fails. For example for non-existing or non-readable file we assume it's fine to have no query output from the test file, e.g. regarded as no error. */ if (res_info.st_size) error|= (RESULT_CONTENT_MISMATCH | RESULT_LENGTH_MISMATCH); } if (result_file && ds_res.length && !error) { if (!record) Loading
mysql-test/mysql-test-run.pl +16 −5 Original line number Diff line number Diff line Loading @@ -258,6 +258,7 @@ our $opt_user; our $opt_user_test; our $opt_valgrind; our $opt_valgrind_mysqltest; our $opt_valgrind_all; our $opt_valgrind_options; Loading Loading @@ -512,6 +513,7 @@ sub command_line_setup () { 'gcov' => \$opt_gcov, 'gprof' => \$opt_gprof, 'valgrind:s' => \$opt_valgrind, 'valgrind-mysqltest:s' => \$opt_valgrind_mysqltest, 'valgrind-all:s' => \$opt_valgrind_all, 'valgrind-options=s' => \$opt_valgrind_options, Loading Loading @@ -696,9 +698,15 @@ sub command_line_setup () { # "" option set with no argument # "somestring" option is name/path of valgrind executable if ( defined $opt_valgrind_all and ! $opt_valgrind ) # Take executable path from any of them, if any $opt_valgrind= $opt_valgrind_mysqltest if $opt_valgrind_mysqltest; $opt_valgrind= $opt_valgrind_all if $opt_valgrind_all; # If valgrind flag not defined, define if other valgrind flags are unless ( defined $opt_valgrind ) { $opt_valgrind= $opt_valgrind_all; $opt_valgrind= "" if defined $opt_valgrind_mysqltest or defined $opt_valgrind_all; } if ( ! $opt_testcase_timeout ) Loading Loading @@ -2110,7 +2118,7 @@ sub run_mysqltest ($) { mtr_init_args(\$args); if ( defined $opt_valgrind ) if ( defined $opt_valgrind_mysqltest ) { valgrind_arguments($args, \$exe); } Loading Loading @@ -2208,6 +2216,8 @@ sub valgrind_arguments { mtr_add_arg($args, "--alignment=8"); mtr_add_arg($args, "--leak-check=yes"); mtr_add_arg($args, "--num-callers=16"); mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir) if -f "$glob_mysql_test_dir/valgrind.supp"; if ( defined $opt_valgrind_all ) { Loading Loading @@ -2293,10 +2303,11 @@ Options for coverage, profiling etc gcov FIXME gprof FIXME valgrind[=exe] Run the "mysqltest" executable as well as the "mysqld" valgrind[=EXE] Run the "mysqltest" executable as well as the "mysqld" server using valgrind, optionally specifying the executable path/name valgrind-all FIXME valgrind-mysqltest[=EXE] In addition, run the "mysqltest" executable with valgrind valgrind-all[=EXE] Adds verbose flag, and --show-reachable to valgrind valgrind-options=ARGS Extra options to give valgrind Misc options Loading
ndb/src/ndbapi/Ndbinit.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -296,7 +296,8 @@ NdbImpl::NdbImpl(Ndb_cluster_connection *ndb_cluster_connection, : m_ndb_cluster_connection(ndb_cluster_connection->m_impl), m_dictionary(ndb), theCurrentConnectIndex(0), theNdbObjectIdMap(1024,1024), theNdbObjectIdMap(ndb_cluster_connection->m_impl.m_transporter_facade->theMutexPtr, 1024,1024), theNoOfDBnodes(0) { int i; Loading
ndb/src/ndbapi/ObjectMap.hpp +20 −13 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ class NdbObjectIdMap //: NdbLockable { public: STATIC_CONST( InvalidId = ~(Uint32)0 ); NdbObjectIdMap(Uint32 initalSize = 128, Uint32 expandSize = 10); NdbObjectIdMap(NdbMutex*, Uint32 initalSize = 128, Uint32 expandSize = 10); ~NdbObjectIdMap(); Uint32 map(void * object); Loading @@ -46,14 +46,16 @@ private: void * m_obj; } * m_map; NdbMutex * m_mutex; void expand(Uint32 newSize); }; inline NdbObjectIdMap::NdbObjectIdMap(Uint32 sz, Uint32 eSz) { NdbObjectIdMap::NdbObjectIdMap(NdbMutex* mutex, Uint32 sz, Uint32 eSz) { m_size = 0; m_firstFree = InvalidId; m_map = 0; m_mutex = mutex; m_expandSize = eSz; expand(sz); #ifdef DEBUG_OBJECTMAP Loading Loading @@ -131,13 +133,12 @@ NdbObjectIdMap::getObject(Uint32 id){ inline void NdbObjectIdMap::expand(Uint32 incSize){ NdbMutex_Lock(m_mutex); Uint32 newSize = m_size + incSize; MapEntry * tmp = (MapEntry*)malloc(newSize * sizeof(MapEntry)); MapEntry * tmp = (MapEntry*)realloc(m_map, newSize * sizeof(MapEntry)); if (m_map) { memcpy(tmp, m_map, m_size * sizeof(MapEntry)); free((void*)m_map); } if (likely(tmp != 0)) { m_map = tmp; for(Uint32 i = m_size; i<newSize; i++){ Loading @@ -147,5 +148,11 @@ NdbObjectIdMap::expand(Uint32 incSize){ m_map[newSize-1].m_next = InvalidId; m_size = newSize; } else { ndbout_c("NdbObjectIdMap::expand unable to expand!!"); } NdbMutex_Unlock(m_mutex); } #endif