ut0mem.c Merge changes in InnoDB-3.23.43b

ut0ut.c 	Merge changes in InnoDB-3.23.43b
trx0purge.c	Merge changes in InnoDB-3.23.43b
trx0rec.c	Merge changes in InnoDB-3.23.43b
trx0trx.c	Merge changes in InnoDB-3.23.43b
trx0undo.c	Merge changes in InnoDB-3.23.43b
thr0loc.c	Merge changes in InnoDB-3.23.43b
sync0arr.c	Merge changes in InnoDB-3.23.43b
sync0rw.c	Merge changes in InnoDB-3.23.43b
sync0sync.c	Merge changes in InnoDB-3.23.43b
srv0srv.c	Merge changes in InnoDB-3.23.43b
srv0start.c	Merge changes in InnoDB-3.23.43b
row0ins.c	Merge changes in InnoDB-3.23.43b
row0mysql.c	Merge changes in InnoDB-3.23.43b
row0purge.c	Merge changes in InnoDB-3.23.43b
row0sel.c	Merge changes in InnoDB-3.23.43b
row0umod.c	Merge changes in InnoDB-3.23.43b
row0upd.c	Merge changes in InnoDB-3.23.43b
row0vers.c	Merge changes in InnoDB-3.23.43b
rem0cmp.c	Merge changes in InnoDB-3.23.43b
que0que.c	Merge changes in InnoDB-3.23.43b
pars0opt.c	Merge changes in InnoDB-3.23.43b
pars0pars.c	Merge changes in InnoDB-3.23.43b
lexyy.c 	Merge changes in InnoDB-3.23.43b
pars0grm.c	Merge changes in InnoDB-3.23.43b
page0page.c	Merge changes in InnoDB-3.23.43b
os0file.c	Merge changes in InnoDB-3.23.43b
mtr0log.c	Merge changes in InnoDB-3.23.43b
mem0pool.c	Merge changes in InnoDB-3.23.43b
log0log.c	Merge changes in InnoDB-3.23.43b
log0recv.c	Merge changes in InnoDB-3.23.43b
lock0lock.c	Merge changes in InnoDB-3.23.43b
ibuf0ibuf.c	Merge changes in InnoDB-3.23.43b
fil0fil.c	Merge changes in InnoDB-3.23.43b
dict0crea.c	Merge changes in InnoDB-3.23.43b
dict0dict.c	Merge changes in InnoDB-3.23.43b
dict0load.c	Merge changes in InnoDB-3.23.43b
dict0mem.c	Merge changes in InnoDB-3.23.43b
data0data.c	Merge changes in InnoDB-3.23.43b
data0type.c	Merge changes in InnoDB-3.23.43b
buf0buf.c	Merge changes in InnoDB-3.23.43b
buf0lru.c	Merge changes in InnoDB-3.23.43b
btr0btr.c	Merge changes in InnoDB-3.23.43b
btr0cur.c	Merge changes in InnoDB-3.23.43b
btr0pcur.c	Merge changes in InnoDB-3.23.43b
btr0sea.c	Merge changes in InnoDB-3.23.43b
data0type.ic	Merge changes in InnoDB-3.23.43b
dict0dict.ic	Merge changes in InnoDB-3.23.43b
mtr0mtr.ic	Merge changes in InnoDB-3.23.43b
row0upd.ic	Merge changes in InnoDB-3.23.43b
sync0ipm.ic	Merge changes in InnoDB-3.23.43b
sync0rw.ic	Merge changes in InnoDB-3.23.43b
sync0sync.ic	Merge changes in InnoDB-3.23.43b
trx0rseg.ic	Merge changes in InnoDB-3.23.43b
btr0pcur.ic	Merge changes in InnoDB-3.23.43b
buf0buf.ic	Merge changes in InnoDB-3.23.43b
data0data.ic	Merge changes in InnoDB-3.23.43b
row0upd.h	Merge changes in InnoDB-3.23.43b
srv0srv.h	Merge changes in InnoDB-3.23.43b
sync0arr.h	Merge changes in InnoDB-3.23.43b
sync0rw.h	Merge changes in InnoDB-3.23.43b
sync0sync.h	Merge changes in InnoDB-3.23.43b
trx0trx.h	Merge changes in InnoDB-3.23.43b
ut0mem.h	Merge changes in InnoDB-3.23.43b
data0data.h	Merge changes in InnoDB-3.23.43b
data0type.h	Merge changes in InnoDB-3.23.43b
db0err.h	Merge changes in InnoDB-3.23.43b
dict0crea.h	Merge changes in InnoDB-3.23.43b
dict0dict.h	Merge changes in InnoDB-3.23.43b
dict0load.h	Merge changes in InnoDB-3.23.43b
dict0mem.h	Merge changes in InnoDB-3.23.43b
dict0types.h	Merge changes in InnoDB-3.23.43b
fil0fil.h	Merge changes in InnoDB-3.23.43b
ibuf0ibuf.h	Merge changes in InnoDB-3.23.43b
lock0lock.h	Merge changes in InnoDB-3.23.43b
log0log.h	Merge changes in InnoDB-3.23.43b
mtr0mtr.h	Merge changes in InnoDB-3.23.43b
rem0cmp.h	Merge changes in InnoDB-3.23.43b
row0ins.h	Merge changes in InnoDB-3.23.43b
row0mysql.h	Merge changes in InnoDB-3.23.43b
btr0cur.h	Merge changes in InnoDB-3.23.43b
btr0pcur.h	Merge changes in InnoDB-3.23.43b
btr0sea.h	Merge changes in InnoDB-3.23.43b
buf0buf.h	Merge changes in InnoDB-3.23.43b
sql_table.cc	Merge changes in InnoDB-3.23.43b
sql_db.cc	Merge changes in InnoDB-3.23.43b
ha_innobase.cc	Merge changes in InnoDB-3.23.43b
handler.cc	Merge changes in InnoDB-3.23.43b
ha_innobase.h	Merge changes in InnoDB-3.23.43b
handler.h	Merge changes in InnoDB-3.23.43b


sql/ha_innobase.h:
  Merge changes in InnoDB-3.23.43b
sql/handler.h:
  Merge changes in InnoDB-3.23.43b
sql/ha_innobase.cc:
  Merge changes in InnoDB-3.23.43b
sql/handler.cc:
  Merge changes in InnoDB-3.23.43b
sql/sql_db.cc:
  Merge changes in InnoDB-3.23.43b
sql/sql_table.cc:
  Merge changes in InnoDB-3.23.43b
innobase/include/btr0cur.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/btr0pcur.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/btr0sea.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/buf0buf.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/data0data.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/data0type.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/db0err.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/dict0crea.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/dict0dict.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/dict0load.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/dict0mem.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/dict0types.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/fil0fil.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/ibuf0ibuf.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/lock0lock.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/log0log.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/mtr0mtr.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/rem0cmp.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/row0ins.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/row0mysql.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/row0upd.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/srv0srv.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/sync0arr.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/sync0rw.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/sync0sync.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/trx0trx.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/ut0mem.h:
  Merge changes in InnoDB-3.23.43b
innobase/include/btr0pcur.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/buf0buf.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/data0data.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/data0type.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/dict0dict.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/mtr0mtr.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/row0upd.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/sync0ipm.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/sync0rw.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/sync0sync.ic:
  Merge changes in InnoDB-3.23.43b
innobase/include/trx0rseg.ic:
  Merge changes in InnoDB-3.23.43b
innobase/btr/btr0btr.c:
  Merge changes in InnoDB-3.23.43b
innobase/btr/btr0cur.c:
  Merge changes in InnoDB-3.23.43b
innobase/btr/btr0pcur.c:
  Merge changes in InnoDB-3.23.43b
innobase/btr/btr0sea.c:
  Merge changes in InnoDB-3.23.43b
innobase/buf/buf0buf.c:
  Merge changes in InnoDB-3.23.43b
innobase/buf/buf0lru.c:
  Merge changes in InnoDB-3.23.43b
innobase/data/data0data.c:
  Merge changes in InnoDB-3.23.43b
innobase/data/data0type.c:
  Merge changes in InnoDB-3.23.43b
innobase/dict/dict0crea.c:
  Merge changes in InnoDB-3.23.43b
innobase/dict/dict0dict.c:
  Merge changes in InnoDB-3.23.43b
innobase/dict/dict0load.c:
  Merge changes in InnoDB-3.23.43b
innobase/dict/dict0mem.c:
  Merge changes in InnoDB-3.23.43b
innobase/fil/fil0fil.c:
  Merge changes in InnoDB-3.23.43b
innobase/ibuf/ibuf0ibuf.c:
  Merge changes in InnoDB-3.23.43b
innobase/lock/lock0lock.c:
  Merge changes in InnoDB-3.23.43b
innobase/log/log0log.c:
  Merge changes in InnoDB-3.23.43b
innobase/log/log0recv.c:
  Merge changes in InnoDB-3.23.43b
innobase/mem/mem0pool.c:
  Merge changes in InnoDB-3.23.43b
innobase/mtr/mtr0log.c:
  Merge changes in InnoDB-3.23.43b
innobase/os/os0file.c:
  Merge changes in InnoDB-3.23.43b
innobase/page/page0page.c:
  Merge changes in InnoDB-3.23.43b
innobase/pars/lexyy.c:
  Merge changes in InnoDB-3.23.43b
innobase/pars/pars0grm.c:
  Merge changes in InnoDB-3.23.43b
innobase/pars/pars0opt.c:
  Merge changes in InnoDB-3.23.43b
innobase/pars/pars0pars.c:
  Merge changes in InnoDB-3.23.43b
innobase/que/que0que.c:
  Merge changes in InnoDB-3.23.43b
innobase/rem/rem0cmp.c:
  Merge changes in InnoDB-3.23.43b
innobase/row/row0ins.c:
  Merge changes in InnoDB-3.23.43b
innobase/row/row0mysql.c:
  Merge changes in InnoDB-3.23.43b
innobase/row/row0purge.c:
  Merge changes in InnoDB-3.23.43b
innobase/row/row0sel.c:
  Merge changes in InnoDB-3.23.43b
innobase/row/row0umod.c:
  Merge changes in InnoDB-3.23.43b
innobase/row/row0upd.c:
  Merge changes in InnoDB-3.23.43b
innobase/row/row0vers.c:
  Merge changes in InnoDB-3.23.43b
innobase/srv/srv0srv.c:
  Merge changes in InnoDB-3.23.43b
innobase/srv/srv0start.c:
  Merge changes in InnoDB-3.23.43b
innobase/sync/sync0arr.c:
  Merge changes in InnoDB-3.23.43b
innobase/sync/sync0rw.c:
  Merge changes in InnoDB-3.23.43b
innobase/sync/sync0sync.c:
  Merge changes in InnoDB-3.23.43b
innobase/thr/thr0loc.c:
  Merge changes in InnoDB-3.23.43b
innobase/trx/trx0purge.c:
  Merge changes in InnoDB-3.23.43b
innobase/trx/trx0rec.c:
  Merge changes in InnoDB-3.23.43b
innobase/trx/trx0trx.c:
  Merge changes in InnoDB-3.23.43b
innobase/trx/trx0undo.c:
  Merge changes in InnoDB-3.23.43b
innobase/ut/ut0mem.c:
  Merge changes in InnoDB-3.23.43b
innobase/ut/ut0ut.c:
  Merge changes in InnoDB-3.23.43b
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
This commit is contained in:
unknown 2001-10-10 22:47:08 +03:00
commit 1904897be7
91 changed files with 5241 additions and 1234 deletions

View file

@ -577,6 +577,17 @@ lock_sys_create(
/* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */
}
/*************************************************************************
Gets the size of a lock struct. */
ulint
lock_get_size(void)
/*===============*/
/* out: size in bytes */
{
return((ulint)sizeof(lock_t));
}
/*************************************************************************
Gets the mode of a lock. */
UNIV_INLINE
@ -709,13 +720,17 @@ lock_mode_stronger_or_eq(
ulint mode2) /* in: lock mode */
{
ut_ad(mode1 == LOCK_X || mode1 == LOCK_S || mode1 == LOCK_IX
|| mode1 == LOCK_IS);
|| mode1 == LOCK_IS || mode1 == LOCK_AUTO_INC);
ut_ad(mode2 == LOCK_X || mode2 == LOCK_S || mode2 == LOCK_IX
|| mode2 == LOCK_IS);
|| mode2 == LOCK_IS || mode2 == LOCK_AUTO_INC);
if (mode1 == LOCK_X) {
return(TRUE);
} else if (mode1 == LOCK_AUTO_INC && mode2 == LOCK_AUTO_INC) {
return(TRUE);
} else if (mode1 == LOCK_S
&& (mode2 == LOCK_S || mode2 == LOCK_IS)) {
return(TRUE);
@ -743,9 +758,9 @@ lock_mode_compatible(
ulint mode2) /* in: lock mode */
{
ut_ad(mode1 == LOCK_X || mode1 == LOCK_S || mode1 == LOCK_IX
|| mode1 == LOCK_IS);
|| mode1 == LOCK_IS || mode1 == LOCK_AUTO_INC);
ut_ad(mode2 == LOCK_X || mode2 == LOCK_S || mode2 == LOCK_IX
|| mode2 == LOCK_IS);
|| mode2 == LOCK_IS || mode2 == LOCK_AUTO_INC);
if (mode1 == LOCK_S && (mode2 == LOCK_IS || mode2 == LOCK_S)) {
@ -755,12 +770,18 @@ lock_mode_compatible(
return(FALSE);
} else if (mode1 == LOCK_AUTO_INC && (mode2 == LOCK_IS
|| mode2 == LOCK_IX)) {
return(TRUE);
} else if (mode1 == LOCK_IS && (mode2 == LOCK_IS
|| mode2 == LOCK_IX
|| mode2 == LOCK_AUTO_INC
|| mode2 == LOCK_S)) {
return(TRUE);
} else if (mode1 == LOCK_IX && (mode2 == LOCK_IS
|| mode2 == LOCK_AUTO_INC
|| mode2 == LOCK_IX)) {
return(TRUE);
}
@ -1836,7 +1857,7 @@ lock_grant(
Cancels a waiting record lock request and releases the waiting transaction
that requested it. NOTE: does NOT check if waiting lock requests behind this
one can now be granted! */
static
void
lock_rec_cancel(
/*============*/
@ -2812,7 +2833,18 @@ lock_table_create(
ut_ad(table && trx);
ut_ad(mutex_own(&kernel_mutex));
lock = mem_heap_alloc(trx->lock_heap, sizeof(lock_t));
if (type_mode == LOCK_AUTO_INC) {
/* Only one trx can have the lock on the table
at a time: we may use the memory preallocated
to the table object */
lock = table->auto_inc_lock;
ut_a(trx->auto_inc_lock == NULL);
trx->auto_inc_lock = lock;
} else {
lock = mem_heap_alloc(trx->lock_heap, sizeof(lock_t));
}
if (lock == NULL) {
@ -2854,6 +2886,10 @@ lock_table_remove_low(
table = lock->un_member.tab_lock.table;
trx = lock->trx;
if (lock == trx->auto_inc_lock) {
trx->auto_inc_lock = NULL;
}
UT_LIST_REMOVE(trx_locks, trx->trx_locks, lock);
UT_LIST_REMOVE(un_member.tab_lock.locks, table->locks, lock);
}
@ -2988,7 +3024,7 @@ lock_table(
if (lock_table_other_has_incompatible(trx, LOCK_WAIT, table, mode)) {
/* Another trx has request on the table in an incompatible
/* Another trx has a request on the table in an incompatible
mode: this trx must wait */
err = lock_table_enqueue_waiting(mode, table, thr);
@ -3101,6 +3137,24 @@ lock_table_dequeue(
/*=========================== LOCK RELEASE ==============================*/
/*************************************************************************
Releases an auto-inc lock a transaction possibly has on a table.
Releases possible other transactions waiting for this lock. */
void
lock_table_unlock_auto_inc(
/*=======================*/
trx_t* trx) /* in: transaction */
{
if (trx->auto_inc_lock) {
mutex_enter(&kernel_mutex);
lock_table_dequeue(trx->auto_inc_lock);
mutex_exit(&kernel_mutex);
}
}
/*************************************************************************
Releases transaction locks, and releases possible other transactions waiting
because of these locks. */
@ -3147,6 +3201,37 @@ lock_release_off_kernel(
}
mem_heap_empty(trx->lock_heap);
ut_a(trx->auto_inc_lock == NULL);
}
/*************************************************************************
Cancels a waiting lock request and releases possible other transactions
waiting behind it. */
void
lock_cancel_waiting_and_release(
/*============================*/
lock_t* lock) /* in: waiting lock request */
{
ut_ad(mutex_own(&kernel_mutex));
if (lock_get_type(lock) == LOCK_REC) {
lock_rec_dequeue_from_page(lock);
} else {
ut_ad(lock_get_type(lock) == LOCK_TABLE);
lock_table_dequeue(lock);
}
/* Reset the wait flag and the back pointer to lock in trx */
lock_reset_lock_and_trx_wait(lock);
/* The following function releases the trx from lock wait */
trx_end_lock_wait(lock->trx);
}
/*************************************************************************
@ -3237,8 +3322,10 @@ lock_table_print(
printf(" lock_mode IS");
} else if (lock_get_mode(lock) == LOCK_IX) {
printf(" lock_mode IX");
} else if (lock_get_mode(lock) == LOCK_AUTO_INC) {
printf(" lock_mode AUTO-INC");
} else {
ut_error;
printf(" unknown lock_mode %lu", lock_get_mode(lock));
}
if (lock_get_wait(lock)) {
@ -3304,10 +3391,7 @@ lock_rec_print(
page = buf_page_get_gen(space, page_no, RW_NO_LATCH,
NULL, BUF_GET_IF_IN_POOL,
#ifdef UNIV_SYNC_DEBUG
IB__FILE__, __LINE__,
#endif
&mtr);
IB__FILE__, __LINE__, &mtr);
if (page) {
page = buf_page_get_nowait(space, page_no, RW_S_LATCH, &mtr);
}
@ -3417,6 +3501,11 @@ loop:
trx = UT_LIST_GET_FIRST(trx_sys->trx_list);
i = 0;
/* Since we temporarily release the kernel mutex when
reading a database page in below, variable trx may be
obsolete now and we must loop through the trx list to
get probably the same trx, or some other trx. */
while (trx && (i < nth_trx)) {
trx = UT_LIST_GET_NEXT(trx_list, trx);
@ -3466,6 +3555,9 @@ loop:
i = 0;
/* Look at the note about the trx loop above why we loop here:
lock may be an obsolete pointer now. */
lock = UT_LIST_GET_FIRST(trx->trx_locks);
while (lock && (i < nth_lock)) {