branches/zip: Fix bugs in the fix of Issue #181. Tested inside and

outside Valgrind, with innodb_use_sys_malloc set to 0 and 1.

mem_init(): Invoke ut_mem_init() before mem_pool_create(), because
the latter one will invoke ut_malloc().

srv_general_init(): Do not initialize the memory subsystem (mem_init()).

innobase_init(): Initialize the memory subsystem (mem_init()) before
calling srv_parse_data_file_paths_and_sizes(), which needs ut_malloc().
Call ut_free_all_mem() in error handling to clean up after the mem_init().
This commit is contained in:
marko 2009-02-23 22:14:38 +00:00
parent 6ef2553098
commit d25cf61788
4 changed files with 14 additions and 22 deletions

View file

@ -1982,6 +1982,11 @@ innobase_init(
internal_innobase_data_file_path = my_strdup(innobase_data_file_path,
MYF(MY_FAE));
srv_mem_pool_size = (ulint) innobase_additional_mem_pool_size;
/* Initialize the InnoDB memory subsystem before calling
ut_malloc() in srv_parse_data_file_paths_and_sizes(). */
mem_init(srv_mem_pool_size);
ret = (bool) srv_parse_data_file_paths_and_sizes(
internal_innobase_data_file_path,
@ -1994,8 +1999,10 @@ innobase_init(
if (ret == FALSE) {
sql_print_error(
"InnoDB: syntax error in innodb_data_file_path");
mem_free_and_error:
my_free(internal_innobase_data_file_path,
MYF(MY_ALLOW_ZERO_PTR));
ut_free_all_mem();
goto error;
}
@ -2025,9 +2032,7 @@ innobase_init(
sql_print_error("syntax error in innodb_log_group_home_dir, or a "
"wrong number of mirrored log groups");
my_free(internal_innobase_data_file_path,
MYF(MY_ALLOW_ZERO_PTR));
goto error;
goto mem_free_and_error;
}
/* Validate the file format by animal name */
@ -2040,9 +2045,7 @@ innobase_init(
sql_print_error("InnoDB: wrong innodb_file_format.");
my_free(internal_innobase_data_file_path,
MYF(MY_ALLOW_ZERO_PTR));
goto error;
goto mem_free_and_error;
}
} else {
/* Set it to the default file format id. Though this
@ -2081,10 +2084,7 @@ innobase_init(
trx_sys_file_format_id_to_name(
DICT_TF_FORMAT_MAX));
my_free(internal_innobase_data_file_path,
MYF(MY_ALLOW_ZERO_PTR));
goto error;
goto mem_free_and_error;
}
}
@ -2107,8 +2107,6 @@ innobase_init(
srv_buf_pool_size = (ulint) innobase_buffer_pool_size;
srv_mem_pool_size = (ulint) innobase_additional_mem_pool_size;
srv_n_file_io_threads = (ulint) innobase_file_io_threads;
srv_force_recovery = (ulint) innobase_force_recovery;
@ -2156,9 +2154,7 @@ innobase_init(
err = innobase_start_or_create_for_mysql();
if (err != DB_SUCCESS) {
my_free(internal_innobase_data_file_path,
MYF(MY_ALLOW_ZERO_PTR));
goto error;
goto mem_free_and_error;
}
innobase_open_tables = hash_create(200);

View file

@ -356,8 +356,7 @@ void
srv_free(void);
/*==========*/
/*************************************************************************
Initializes the synchronization primitives, memory system, and the thread
local storage. */
Initializes the synchronization primitives and the thread local storage. */
UNIV_INTERN
void
srv_general_init(void);

View file

@ -162,9 +162,8 @@ mem_init(
size = 1;
}
mem_comm_pool = mem_pool_create(size);
ut_mem_init();
mem_comm_pool = mem_pool_create(size);
}
#ifdef UNIV_MEM_DEBUG

View file

@ -960,8 +960,7 @@ srv_free(void)
}
/*************************************************************************
Initializes the synchronization primitives, memory system, and the thread
local storage. */
Initializes the synchronization primitives and the thread local storage. */
UNIV_INTERN
void
srv_general_init(void)
@ -969,7 +968,6 @@ srv_general_init(void)
{
os_sync_init();
sync_init();
mem_init(srv_mem_pool_size);
thr_local_init();
}