mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1
into moonbone.local:/work/13218-bug-4.1-mysql
This commit is contained in:
commit
9fe540fa13
4 changed files with 70 additions and 30 deletions
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -694,21 +699,21 @@ err:
|
|||
static int check_result(DYNAMIC_STRING* ds, const char *fname,
|
||||
my_bool require_option)
|
||||
{
|
||||
int error = 0;
|
||||
int res=dyn_string_cmp(ds, fname);
|
||||
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()");
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
@ -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,
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -2110,7 +2118,7 @@ sub run_mysqltest ($) {
|
|||
|
||||
mtr_init_args(\$args);
|
||||
|
||||
if ( defined $opt_valgrind )
|
||||
if ( defined $opt_valgrind_mysqltest )
|
||||
{
|
||||
valgrind_arguments($args, \$exe);
|
||||
}
|
||||
|
@ -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 )
|
||||
{
|
||||
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -131,21 +133,26 @@ 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++){
|
||||
m_map[i].m_next = i + 1;
|
||||
}
|
||||
m_firstFree = m_size;
|
||||
m_map[newSize-1].m_next = InvalidId;
|
||||
m_size = newSize;
|
||||
}
|
||||
m_map = tmp;
|
||||
|
||||
for(Uint32 i = m_size; i<newSize; i++){
|
||||
m_map[i].m_next = i + 1;
|
||||
else
|
||||
{
|
||||
ndbout_c("NdbObjectIdMap::expand unable to expand!!");
|
||||
}
|
||||
m_firstFree = m_size;
|
||||
m_map[newSize-1].m_next = InvalidId;
|
||||
m_size = newSize;
|
||||
NdbMutex_Unlock(m_mutex);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue