Merge fix for bug #55039 from mysql-5.1-security to mysql-trunk-security.
bug #55039 Failing assertion: space_id > 0 in fil0fil.c line 2618 . rb://396 approved by Sunny Bains
This commit is contained in:
commit
0c974ba5f4
@ -240,17 +240,29 @@ dict_build_table_def_step(
|
||||
ibool is_path;
|
||||
mtr_t mtr;
|
||||
ulint space = 0;
|
||||
ibool file_per_table;
|
||||
|
||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||
|
||||
table = node->table;
|
||||
|
||||
dict_hdr_get_new_id(&table->id, NULL,
|
||||
srv_file_per_table ? &space : NULL);
|
||||
/* Cache the global variable "srv_file_per_table" to
|
||||
a local variable before using it. Please note
|
||||
"srv_file_per_table" is not under dict_sys mutex
|
||||
protection, and could be changed while executing
|
||||
this function. So better to cache the current value
|
||||
to a local variable, and all future reference to
|
||||
"srv_file_per_table" should use this local variable. */
|
||||
file_per_table = srv_file_per_table;
|
||||
|
||||
dict_hdr_get_new_id(&table->id, NULL, NULL);
|
||||
|
||||
thr_get_trx(thr)->table_id = table->id;
|
||||
|
||||
if (srv_file_per_table) {
|
||||
if (file_per_table) {
|
||||
/* Get a new space id if srv_file_per_table is set */
|
||||
dict_hdr_get_new_id(NULL, NULL, &space);
|
||||
|
||||
if (UNIV_UNLIKELY(space == ULINT_UNDEFINED)) {
|
||||
return(DB_ERROR);
|
||||
}
|
||||
|
@ -1453,7 +1453,11 @@ try_again:
|
||||
|
||||
/* When srv_file_per_table is on, file creation failure may not
|
||||
be critical to the whole instance. Do not crash the server in
|
||||
case of unknown errors. */
|
||||
case of unknown errors.
|
||||
Please note "srv_file_per_table" is a global variable with
|
||||
no explicit synchronization protection. It could be
|
||||
changed during this execution path. It might not have the
|
||||
same value as the one when building the table definition */
|
||||
if (srv_file_per_table) {
|
||||
retry = os_file_handle_error_no_exit(name,
|
||||
create_mode == OS_FILE_CREATE ?
|
||||
@ -1540,7 +1544,11 @@ try_again:
|
||||
|
||||
/* When srv_file_per_table is on, file creation failure may not
|
||||
be critical to the whole instance. Do not crash the server in
|
||||
case of unknown errors. */
|
||||
case of unknown errors.
|
||||
Please note "srv_file_per_table" is a global variable with
|
||||
no explicit synchronization protection. It could be
|
||||
changed during this execution path. It might not have the
|
||||
same value as the one when building the table definition */
|
||||
if (srv_file_per_table) {
|
||||
retry = os_file_handle_error_no_exit(name,
|
||||
create_mode == OS_FILE_CREATE ?
|
||||
|
Loading…
x
Reference in New Issue
Block a user