Below is the list of changes that have just been committed into a local
5.1 repository of monty. When monty does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-08-02 07:49:29+03:00, monty@stripped +10 -0
Set --debug-check if one uses DBUG_PUSH in all clients
Fixed bug in query cache that made it impossible to run mysqld with --debug
Fixed memory leaks in mysqldump and mysqltest
Memory leaks associated with wrong usage of mysqltest is not fixed. To find these, run
mysql-test-run --debug mysqltest
client/mysql_upgrade.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +1 -0
Set --debug-check if one uses DBUG_PUSH
client/mysqlcheck.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +1 -0
Set --debug-check if one uses DBUG_PUSH
client/mysqldump.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +43 -13
Set --debug-check if one uses DBUG_PUSH
Fixed several memory leaks
client/mysqlimport.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +1 -0
Set --debug-check if one uses DBUG_PUSH
client/mysqlshow.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +1 -0
Set --debug-check if one uses DBUG_PUSH
client/mysqlslap.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +1 -0
Set --debug-check if one uses DBUG_PUSH
client/mysqltest.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +14 -10
Set --debug-check if one uses DBUG_PUSH
Fixed some memory leaks
Removed MY_CHECK_ERROR argument to my_end() as mysqltest.test otherwise shows MANY
memory leaks
dbug/dbug.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +3 -4
Fixed compiler warning
Force flush of out_file on end
Removed some wrong dbug_flush(0) commands that could cause crashes
mysys/my_init.c@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +3 -3
Don't write memory usage if MY_GIVE_INFO is not given
sql/sql_cache.cc@stripped, 2007-08-02 07:49:24+03:00, monty@stripped +4 -3
Fixed bug in query cache that made it impossible to run mysqld with --debug
diff -Nrup a/client/mysql_upgrade.c b/client/mysql_upgrade.c
--- a/client/mysql_upgrade.c 2007-08-01 22:58:59 +03:00
+++ b/client/mysql_upgrade.c 2007-08-02 07:49:24 +03:00
@@ -218,6 +218,7 @@ get_one_option(int optid, const struct m
case '#':
DBUG_PUSH(argument ? argument : default_dbug_option);
add_option= FALSE;
+ debug_check_flag= 1;
break;
case 'p':
diff -Nrup a/client/mysqlcheck.c b/client/mysqlcheck.c
--- a/client/mysqlcheck.c 2007-08-01 22:58:59 +03:00
+++ b/client/mysqlcheck.c 2007-08-02 07:49:24 +03:00
@@ -310,6 +310,7 @@ get_one_option(int optid, const struct m
break;
case '#':
DBUG_PUSH(argument ? argument : "d:t:o");
+ debug_check_flag= 1;
break;
#include <sslopt-case.h>
case OPT_TABLES:
diff -Nrup a/client/mysqldump.c b/client/mysqldump.c
--- a/client/mysqldump.c 2007-08-01 22:58:59 +03:00
+++ b/client/mysqldump.c 2007-08-02 07:49:24 +03:00
@@ -729,7 +729,7 @@ get_one_option(int optid, const struct m
break;
case '#':
DBUG_PUSH(argument ? argument : default_dbug_option);
- debug_info_flag= 1;
+ debug_check_flag= 1;
break;
#include <sslopt-case.h>
case 'V': print_version(); exit(0);
@@ -2070,7 +2070,6 @@ static uint get_table_structure(char *ta
int len;
MYSQL_RES *result;
MYSQL_ROW row;
-
DBUG_ENTER("get_table_structure");
DBUG_PRINT("enter", ("db: %s table: %s", db, table));
@@ -2472,6 +2471,7 @@ static uint get_table_structure(char *ta
fprintf(sql_file, " (%s)",row[7]); /* Sub key */
check_io(sql_file);
}
+ mysql_free_result(result);
if (!opt_xml)
{
if (keynr)
@@ -2813,7 +2813,7 @@ static void dump_table(char *table, char
/*
The "table" could be a view. If so, we don't do anything here.
*/
- if (strcmp (table_type, "VIEW") == 0)
+ if (strcmp(table_type, "VIEW") == 0)
DBUG_VOID_RETURN;
/* Check --no-data flag */
@@ -2903,6 +2903,7 @@ static void dump_table(char *table, char
if (mysql_real_query(mysql, query_string.str, query_string.length))
{
DB_error(mysql, "when executing 'SELECT INTO OUTFILE'");
+ dynstr_free(&query_string);
DBUG_VOID_RETURN;
}
}
@@ -3257,8 +3258,8 @@ static void dump_table(char *table, char
check_io(md_result_file);
}
mysql_free_result(res);
- dynstr_free(&query_string);
}
+ dynstr_free(&query_string);
DBUG_VOID_RETURN;
err:
@@ -3379,6 +3380,7 @@ static int dump_tablespaces(char* ts_whe
char extra_format[]= "UNDO_BUFFER_SIZE=";
char *ubs;
char *endsemi;
+ DBUG_ENTER("dump_tablespaces");
init_dynamic_string_checked(&sqlbuf,
"SELECT LOGFILE_GROUP_NAME,"
@@ -3410,6 +3412,7 @@ static int dump_tablespaces(char* ts_whe
if (mysql_query(mysql, sqlbuf.str) ||
!(tableres = mysql_store_result(mysql)))
{
+ dynstr_free(&sqlbuf);
if (mysql_errno(mysql) == ER_BAD_TABLE_ERROR ||
mysql_errno(mysql) == ER_BAD_DB_ERROR ||
mysql_errno(mysql) == ER_UNKNOWN_TABLE)
@@ -3418,12 +3421,12 @@ static int dump_tablespaces(char* ts_whe
"\n--\n-- Not dumping tablespaces as no INFORMATION_SCHEMA.FILES"
" table on this server\n--\n");
check_io(md_result_file);
- return 0;
+ DBUG_RETURN(0);
}
- my_printf_error(0, "Error: Couldn't dump tablespaces %s",
+ my_printf_error(0, "Error: '%s' when trying to dump tablespaces",
MYF(0), mysql_error(mysql));
- return 1;
+ DBUG_RETURN(1);
}
buf[0]= 0;
@@ -3475,6 +3478,7 @@ static int dump_tablespaces(char* ts_whe
}
}
dynstr_free(&sqlbuf);
+ mysql_free_result(tableres);
init_dynamic_string_checked(&sqlbuf,
"SELECT DISTINCT TABLESPACE_NAME,"
" FILE_NAME,"
@@ -3492,7 +3496,10 @@ static int dump_tablespaces(char* ts_whe
dynstr_append_checked(&sqlbuf, " ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME");
if (mysql_query_with_error_report(mysql, &tableres, sqlbuf.str))
- return 1;
+ {
+ dynstr_free(&sqlbuf);
+ DBUG_RETURN(1);
+ }
buf[0]= 0;
while ((row= mysql_fetch_row(tableres)))
@@ -3538,8 +3545,9 @@ static int dump_tablespaces(char* ts_whe
}
}
+ mysql_free_result(tableres);
dynstr_free(&sqlbuf);
- return 0;
+ DBUG_RETURN(0);
}
static int dump_all_databases()
@@ -3626,8 +3634,11 @@ RETURN VALUES
0 Success.
1 Failure.
*/
+
int init_dumping_tables(char *qdatabase)
{
+ DBUG_ENTER("init_dumping_tables");
+
if (!opt_create_db)
{
char qbuf[256];
@@ -3660,10 +3671,10 @@ int init_dumping_tables(char *qdatabase)
{
fprintf(md_result_file,"\n%s;\n",row[1]);
}
+ mysql_free_result(dbinfo);
}
}
-
- return 0;
+ DBUG_RETURN(0);
} /* init_dumping_tables */
@@ -3931,8 +3942,13 @@ static int dump_selected_tables(char *db
}
else
{
- maybe_die(EX_ILLEGAL_TABLE, "Couldn't find table: \"%s\"", *table_names);
- /* We shall countinue here, if --force was given */
+ if (!ignore_errors)
+ {
+ dynstr_free(&lock_tables_query);
+ free_root(&root, MYF(0));
+ }
+ maybe_die(EX_ILLEGAL_TABLE, "Couldn't find table: \"%s\"", *table_names);
+ /* We shall countinue here, if --force was given */
}
}
end= pos;
@@ -3941,14 +3957,25 @@ static int dump_selected_tables(char *db
{
if (mysql_real_query(mysql, lock_tables_query.str,
lock_tables_query.length-1))
+ {
+ if (!ignore_errors)
+ {
+ dynstr_free(&lock_tables_query);
+ free_root(&root, MYF(0));
+ }
DB_error(mysql, "when doing LOCK TABLES");
/* We shall countinue here, if --force was given */
+ }
}
dynstr_free(&lock_tables_query);
if (flush_logs)
{
if (mysql_refresh(mysql, REFRESH_LOG))
+ {
+ if (!ignore_errors)
+ free_root(&root, MYF(0));
DB_error(mysql, "when doing refresh");
+ }
/* We shall countinue here, if --force was given */
}
if (opt_xml)
@@ -4511,6 +4538,9 @@ static my_bool get_view_structure(char *
if (!(table_res= mysql_store_result(mysql)) ||
!(row= mysql_fetch_row(table_res)))
{
+ if (table_res)
+ mysql_free_result(table_res);
+ dynstr_free(&ds_view);
DB_error(mysql, "when trying to save the result of SHOW CREATE TABLE in ds_view.");
DBUG_RETURN(1);
}
diff -Nrup a/client/mysqlimport.c b/client/mysqlimport.c
--- a/client/mysqlimport.c 2007-08-01 22:59:00 +03:00
+++ b/client/mysqlimport.c 2007-08-02 07:49:24 +03:00
@@ -240,6 +240,7 @@ get_one_option(int optid, const struct m
break;
case '#':
DBUG_PUSH(argument ? argument : "d:t:o");
+ debug_check_flag= 1;
break;
#include <sslopt-case.h>
case 'V': print_version(); exit(0);
diff -Nrup a/client/mysqlshow.c b/client/mysqlshow.c
--- a/client/mysqlshow.c 2007-08-01 22:59:00 +03:00
+++ b/client/mysqlshow.c 2007-08-02 07:49:24 +03:00
@@ -299,6 +299,7 @@ get_one_option(int optid, const struct m
break;
case '#':
DBUG_PUSH(argument ? argument : "d:t:o");
+ debug_check_flag= 1;
break;
#include <sslopt-case.h>
case 'V':
diff -Nrup a/client/mysqlslap.c b/client/mysqlslap.c
--- a/client/mysqlslap.c 2007-08-01 22:59:00 +03:00
+++ b/client/mysqlslap.c 2007-08-02 07:49:24 +03:00
@@ -699,6 +699,7 @@ get_one_option(int optid, const struct m
break;
case '#':
DBUG_PUSH(argument ? argument : default_dbug_option);
+ debug_check_flag= 1;
break;
#include <sslopt-case.h>
case 'V':
diff -Nrup a/client/mysqltest.c b/client/mysqltest.c
--- a/client/mysqltest.c 2007-08-01 22:59:00 +03:00
+++ b/client/mysqltest.c 2007-08-02 07:49:24 +03:00
@@ -809,10 +809,9 @@ void free_used_memory()
static void cleanup_and_exit(int exit_code)
{
free_used_memory();
- my_end(my_end_arg | MY_CHECK_ERROR);
+ my_end(my_end_arg);
- if (!silent)
- {
+ if (!silent) {
switch (exit_code) {
case 1:
printf("not ok\n");
@@ -1085,8 +1084,7 @@ void check_result(DYNAMIC_STRING* ds)
DBUG_ENTER("check_result");
DBUG_ASSERT(result_file_name);
- switch (dyn_string_cmp(ds, result_file_name))
- {
+ switch (dyn_string_cmp(ds, result_file_name)) {
case RESULT_OK:
break; /* ok */
case RESULT_LENGTH_MISMATCH:
@@ -1930,7 +1928,10 @@ void do_exec(struct st_command *command)
command->first_argument, ds_cmd.str));
if (!(res_file= my_popen(&ds_cmd, "r")) && command->abort_on_error)
+ {
+ dynstr_free(&ds_cmd);
die("popen(\"%s\", \"r\") failed", command->first_argument);
+ }
while (fgets(buf, sizeof(buf), res_file))
{
@@ -1954,6 +1955,7 @@ void do_exec(struct st_command *command)
{
log_msg("exec of '%s failed, error: %d, status: %d, errno: %d",
ds_cmd.str, error, status, errno);
+ dynstr_free(&ds_cmd);
die("command \"%s\" failed", command->first_argument);
}
@@ -1972,8 +1974,11 @@ void do_exec(struct st_command *command)
}
}
if (!ok)
+ {
+ dynstr_free(&ds_cmd);
die("command \"%s\" failed with wrong error: %d",
command->first_argument, status);
+ }
}
else if (command->expected_errors.err[0].type == ERR_ERRNO &&
command->expected_errors.err[0].code.errnum != 0)
@@ -1981,6 +1986,7 @@ void do_exec(struct st_command *command)
/* Error code we wanted was != 0, i.e. not an expected success */
log_msg("exec of '%s failed, error: %d, errno: %d",
ds_cmd.str, error, errno);
+ dynstr_free(&ds_cmd);
die("command \"%s\" succeeded - should have failed with errno %d...",
command->first_argument, command->expected_errors.err[0].code.errnum);
}
@@ -4632,6 +4638,7 @@ get_one_option(int optid, const struct m
case '#':
#ifndef DBUG_OFF
DBUG_PUSH(argument ? argument : "d:t:S:i:O,/tmp/mysqltest.trace");
+ debug_check_flag= 1;
#endif
break;
case 'r':
@@ -5388,11 +5395,8 @@ end:
ds - dynamic string which is used for output buffer
NOTE
- If there is an unexpected error this function will abort mysqltest
- immediately.
-
- RETURN VALUE
- error - function will not return
+ If there is an unexpected error this function will abort mysqltest
+ immediately.
*/
void handle_error(struct st_command *command,
diff -Nrup a/dbug/dbug.c b/dbug/dbug.c
--- a/dbug/dbug.c 2007-05-10 12:59:24 +03:00
+++ b/dbug/dbug.c 2007-08-02 07:49:24 +03:00
@@ -1184,7 +1184,7 @@ void _db_dump_(uint _line_, const char *
fprintf(cs->stack->out_file, "%s: ", cs->func);
}
sprintf(dbuff,"%s: Memory: 0x%lx Bytes: (%ld)\n",
- keyword,(ulong) memory, length);
+ keyword, (ulong) memory, (long) length);
(void) fputs(dbuff,cs->stack->out_file);
pos=0;
@@ -1449,6 +1449,7 @@ static void FreeState(CODE_STATE *cs, st
FreeList(state->p_functions);
if (!is_shared(state, out_file))
DBUGCloseFile(cs, state->out_file);
+ (void) fflush(cs->stack->out_file);
if (state->prof_file)
DBUGCloseFile(cs, state->prof_file);
if (free_state)
@@ -1882,7 +1883,6 @@ static FILE *OpenProfile(CODE_STATE *cs,
{
(void) fprintf(cs->stack->out_file, ERR_OPEN, cs->process, name);
perror("");
- dbug_flush(0);
(void) Delay(cs->stack->delay);
}
else
@@ -1892,7 +1892,6 @@ static FILE *OpenProfile(CODE_STATE *cs,
{
(void) fprintf(cs->stack->out_file, ERR_OPEN, cs->process, name);
perror("");
- dbug_flush(0);
}
else
{
@@ -1931,7 +1930,7 @@ static void DBUGCloseFile(CODE_STATE *cs
pthread_mutex_lock(&THR_LOCK_dbug);
(void) fprintf(cs->stack->out_file, ERR_CLOSE, cs->process);
perror("");
- dbug_flush(0);
+ dbug_flush(cs);
}
}
diff -Nrup a/mysys/my_init.c b/mysys/my_init.c
--- a/mysys/my_init.c 2007-08-01 22:59:00 +03:00
+++ b/mysys/my_init.c 2007-08-02 07:49:24 +03:00
@@ -134,14 +134,14 @@ void my_end(int infoflag)
We do not use DBUG_ENTER here, as after cleanup DBUG is no longer
operational, so we cannot use DBUG_RETURN.
*/
- DBUG_PRINT("info",("Shutting down"));
+ DBUG_PRINT("info",("Shutting down: infoflag: %d print_info: %d",
+ infoflag, print_info));
if (!info_file)
{
info_file= stderr;
print_info= 0;
}
- DBUG_PRINT("info",("Shutting down: print_info: %d", print_info));
if ((infoflag & MY_CHECK_ERROR) || print_info)
{ /* Test if some file is left open */
@@ -186,7 +186,7 @@ Voluntary context switches %ld, Involunt
fprintf(info_file,"\nRun time: %.1f\n",(double) clock()/CLOCKS_PER_SEC);
#endif
#if defined(SAFEMALLOC)
- TERMINATE(stderr, 1); /* Give statistic on screen */
+ TERMINATE(stderr, (infoflag & MY_GIVE_INFO) != 0);
#elif defined(__WIN__) && defined(_MSC_VER)
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR );
diff -Nrup a/sql/sql_cache.cc b/sql/sql_cache.cc
--- a/sql/sql_cache.cc 2007-07-16 21:34:33 +03:00
+++ b/sql/sql_cache.cc 2007-08-02 07:49:24 +03:00
@@ -862,6 +862,7 @@ Query_cache::Query_cache(ulong query_cac
ulong Query_cache::resize(ulong query_cache_size_arg)
{
+ ulong new_query_cache_size;
DBUG_ENTER("Query_cache::resize");
DBUG_PRINT("qcache", ("from %lu to %lu",query_cache_size,
query_cache_size_arg));
@@ -876,13 +877,13 @@ ulong Query_cache::resize(ulong query_ca
free_cache();
query_cache_size= query_cache_size_arg;
- ulong new_query_cache_size= init_cache();
-
- DBUG_EXECUTE("check_querycache",check_integrity(0););
+ new_query_cache_size= init_cache();
STRUCT_LOCK(&structure_guard_mutex);
m_cache_status= Query_cache::NO_FLUSH_IN_PROGRESS;
pthread_cond_signal(&COND_cache_status_changed);
+ if (new_query_cache_size)
+ DBUG_EXECUTE("check_querycache",check_integrity(1););
STRUCT_UNLOCK(&structure_guard_mutex);
DBUG_RETURN(new_query_cache_size);
| Thread |
|---|
| • bk commit into 5.1 tree (monty:1.2558) | monty | 2 Aug |