mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 03:51:50 +01:00
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:
parent
6ef2553098
commit
d25cf61788
4 changed files with 14 additions and 22 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue