summaryrefslogtreecommitdiff
path: root/innobase/lock
diff options
context:
space:
mode:
authorunknown <serg@serg.mylan>2004-07-20 00:53:24 +0200
committerunknown <serg@serg.mylan>2004-07-20 00:53:24 +0200
commiteee5f15b92f71c74ce315932770a603e4deef477 (patch)
treeb39cfbb54d66b05cd075839aa58dc3215c8d4146 /innobase/lock
parentd57d78ac10980e28344f285bdbc986fa3ee3496e (diff)
parentb940ae1012b00e74e2155c4e35ca7872bed278e3 (diff)
downloadmariadb-git-eee5f15b92f71c74ce315932770a603e4deef477.tar.gz
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
Diffstat (limited to 'innobase/lock')
-rw-r--r--innobase/lock/lock0lock.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/innobase/lock/lock0lock.c b/innobase/lock/lock0lock.c
index be0806590a9..92e8f224dea 100644
--- a/innobase/lock/lock0lock.c
+++ b/innobase/lock/lock0lock.c
@@ -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);
}
/*************************************************************************