mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 03:47:17 +02:00
manual merged (blame me!)
Build-tools/Do-compile: Auto merged Docs/Makefile.am: Auto merged innobase/btr/btr0cur.c: Auto merged innobase/include/lock0lock.h: Auto merged innobase/include/row0mysql.h: Auto merged innobase/include/srv0srv.h: Auto merged innobase/include/sync0arr.h: Auto merged innobase/include/trx0trx.h: Auto merged innobase/lock/lock0lock.c: Auto merged innobase/srv/srv0srv.c: Auto merged innobase/srv/srv0start.c: Auto merged innobase/sync/sync0arr.c: Auto merged innobase/trx/trx0trx.c: Auto merged sql/ha_innodb.cc: Auto merged sql/sql_insert.cc: Auto merged mysql-test/r/innodb.result: to be fixed after the merge
This commit is contained in:
commit
eee5f15b92
22 changed files with 248 additions and 72 deletions
|
|
@ -2023,9 +2023,8 @@ lock_grant(
|
|||
|
||||
lock->trx->auto_inc_lock = lock;
|
||||
} else if (lock_get_type(lock) == LOCK_TABLE_EXP) {
|
||||
ut_ad(lock_get_mode(lock) == LOCK_S
|
||||
ut_a(lock_get_mode(lock) == LOCK_S
|
||||
|| lock_get_mode(lock) == LOCK_X);
|
||||
lock->trx->n_tables_locked++;
|
||||
}
|
||||
|
||||
if (lock_print_waits) {
|
||||
|
|
@ -3203,6 +3202,10 @@ lock_table_create(
|
|||
lock->type_mode = type_mode | LOCK_TABLE;
|
||||
lock->trx = trx;
|
||||
|
||||
if (lock_get_type(lock) == LOCK_TABLE_EXP) {
|
||||
lock->trx->n_lock_table_exp++;
|
||||
}
|
||||
|
||||
lock->un_member.tab_lock.table = table;
|
||||
|
||||
UT_LIST_ADD_LAST(un_member.tab_lock.locks, table->locks, lock);
|
||||
|
|
@ -3238,7 +3241,11 @@ lock_table_remove_low(
|
|||
if (lock == trx->auto_inc_lock) {
|
||||
trx->auto_inc_lock = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (lock_get_type(lock) == LOCK_TABLE_EXP) {
|
||||
lock->trx->n_lock_table_exp--;
|
||||
}
|
||||
|
||||
UT_LIST_REMOVE(trx_locks, trx->trx_locks, lock);
|
||||
UT_LIST_REMOVE(un_member.tab_lock.locks, table->locks, lock);
|
||||
}
|
||||
|
|
@ -3386,7 +3393,7 @@ lock_table(
|
|||
return(DB_SUCCESS);
|
||||
}
|
||||
|
||||
ut_ad(flags == 0 || flags == LOCK_TABLE_EXP);
|
||||
ut_a(flags == 0 || flags == LOCK_TABLE_EXP);
|
||||
|
||||
trx = thr_get_trx(thr);
|
||||
|
||||
|
|
@ -3418,10 +3425,7 @@ lock_table(
|
|||
|
||||
lock_table_create(table, mode | flags, trx);
|
||||
|
||||
if (flags) {
|
||||
ut_ad(mode == LOCK_S || mode == LOCK_X);
|
||||
trx->n_tables_locked++;
|
||||
}
|
||||
ut_a(!flags || mode == LOCK_S || mode == LOCK_X);
|
||||
|
||||
lock_mutex_exit_kernel();
|
||||
|
||||
|
|
@ -3502,13 +3506,13 @@ lock_table_dequeue(
|
|||
#ifdef UNIV_SYNC_DEBUG
|
||||
ut_ad(mutex_own(&kernel_mutex));
|
||||
#endif /* UNIV_SYNC_DEBUG */
|
||||
ut_ad(lock_get_type(in_lock) == LOCK_TABLE ||
|
||||
ut_a(lock_get_type(in_lock) == LOCK_TABLE ||
|
||||
lock_get_type(in_lock) == LOCK_TABLE_EXP);
|
||||
|
||||
lock = UT_LIST_GET_NEXT(un_member.tab_lock.locks, in_lock);
|
||||
|
||||
lock_table_remove_low(in_lock);
|
||||
|
||||
|
||||
/* Check if waiting locks in the queue can now be granted: grant
|
||||
locks if there are no conflicting locks ahead. */
|
||||
|
||||
|
|
@ -3608,9 +3612,8 @@ lock_release_off_kernel(
|
|||
|
||||
lock_table_dequeue(lock);
|
||||
if (lock_get_type(lock) == LOCK_TABLE_EXP) {
|
||||
ut_ad(lock_get_mode(lock) == LOCK_S
|
||||
ut_a(lock_get_mode(lock) == LOCK_S
|
||||
|| lock_get_mode(lock) == LOCK_X);
|
||||
trx->n_tables_locked--;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3631,11 +3634,12 @@ lock_release_off_kernel(
|
|||
mem_heap_empty(trx->lock_heap);
|
||||
|
||||
ut_a(trx->auto_inc_lock == NULL);
|
||||
ut_a(trx->n_tables_locked == 0);
|
||||
ut_a(trx->n_lock_table_exp == 0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Releases table locks, and releases possible other transactions waiting
|
||||
Releases table locks explicitly requested with LOCK TABLES (indicated by
|
||||
lock type LOCK_TABLE_EXP), and releases possible other transactions waiting
|
||||
because of these locks. */
|
||||
|
||||
void
|
||||
|
|
@ -3660,7 +3664,7 @@ lock_release_tables_off_kernel(
|
|||
count++;
|
||||
|
||||
if (lock_get_type(lock) == LOCK_TABLE_EXP) {
|
||||
ut_ad(lock_get_mode(lock) == LOCK_S
|
||||
ut_a(lock_get_mode(lock) == LOCK_S
|
||||
|| lock_get_mode(lock) == LOCK_X);
|
||||
if (trx->insert_undo || trx->update_undo) {
|
||||
|
||||
|
|
@ -3676,7 +3680,7 @@ lock_release_tables_off_kernel(
|
|||
}
|
||||
|
||||
lock_table_dequeue(lock);
|
||||
trx->n_tables_locked--;
|
||||
|
||||
lock = UT_LIST_GET_LAST(trx->trx_locks);
|
||||
continue;
|
||||
}
|
||||
|
|
@ -3695,9 +3699,7 @@ lock_release_tables_off_kernel(
|
|||
lock = UT_LIST_GET_PREV(trx_locks, lock);
|
||||
}
|
||||
|
||||
mem_heap_empty(trx->lock_heap);
|
||||
|
||||
ut_a(trx->n_tables_locked == 0);
|
||||
ut_a(trx->n_lock_table_exp == 0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue