diff options
Diffstat (limited to 'storage/innobase/lock/lock0lock.cc')
-rw-r--r-- | storage/innobase/lock/lock0lock.cc | 107 |
1 files changed, 8 insertions, 99 deletions
diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index aebbf5c1cab..dc7a66ea317 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -552,7 +552,7 @@ void lock_sys_t::close() if (!m_initialised) return; if (lock_latest_err_file != NULL) { - fclose(lock_latest_err_file); + my_fclose(lock_latest_err_file, MYF(MY_WME)); lock_latest_err_file = NULL; } @@ -2427,8 +2427,8 @@ lock_rec_inherit_to_gap( ut_ad(lock_mutex_own()); - /* If srv_locks_unsafe_for_binlog is TRUE or session is using - READ COMMITTED isolation level, we do not want locks set + /* At READ UNCOMMITTED or READ COMMITTED isolation level, + we do not want locks set by an UPDATE or a DELETE to be inherited as gap type locks. But we DO want S-locks/X-locks(taken for replace) set by a consistency constraint to be inherited also then. */ @@ -2438,11 +2438,9 @@ lock_rec_inherit_to_gap( lock = lock_rec_get_next(heap_no, lock)) { if (!lock_rec_get_insert_intention(lock) - && !((srv_locks_unsafe_for_binlog - || lock->trx->isolation_level - <= TRX_ISO_READ_COMMITTED) - && lock_get_mode(lock) == - (lock->trx->duplicates ? LOCK_S : LOCK_X))) { + && (lock->trx->isolation_level > TRX_ISO_READ_COMMITTED + || lock_get_mode(lock) != + (lock->trx->duplicates ? LOCK_S : LOCK_X))) { lock_rec_add_to_queue( LOCK_REC | LOCK_GAP | ulint(lock_get_mode(lock)), @@ -6000,71 +5998,6 @@ lock_get_trx_id( } /*******************************************************************//** -Gets the mode of a lock in a human readable string. -The string should not be free()'d or modified. -@return lock mode */ -const char* -lock_get_mode_str( -/*==============*/ - const lock_t* lock) /*!< in: lock */ -{ - ibool is_gap_lock; - - is_gap_lock = lock_get_type_low(lock) == LOCK_REC - && lock_rec_get_gap(lock); - - switch (lock_get_mode(lock)) { - case LOCK_S: - if (is_gap_lock) { - return("S,GAP"); - } else { - return("S"); - } - case LOCK_X: - if (is_gap_lock) { - return("X,GAP"); - } else { - return("X"); - } - case LOCK_IS: - if (is_gap_lock) { - return("IS,GAP"); - } else { - return("IS"); - } - case LOCK_IX: - if (is_gap_lock) { - return("IX,GAP"); - } else { - return("IX"); - } - case LOCK_AUTO_INC: - return("AUTO_INC"); - default: - return("UNKNOWN"); - } -} - -/*******************************************************************//** -Gets the type of a lock in a human readable string. -The string should not be free()'d or modified. -@return lock type */ -const char* -lock_get_type_str( -/*==============*/ - const lock_t* lock) /*!< in: lock */ -{ - switch (lock_get_type_low(lock)) { - case LOCK_REC: - return("RECORD"); - case LOCK_TABLE: - return("TABLE"); - default: - return("UNKNOWN"); - } -} - -/*******************************************************************//** Gets the table on which the lock is. @return table */ UNIV_INLINE @@ -6140,32 +6073,6 @@ lock_rec_get_index_name( return(lock->index->name); } -/*******************************************************************//** -For a record lock, gets the tablespace number on which the lock is. -@return tablespace number */ -ulint -lock_rec_get_space_id( -/*==================*/ - const lock_t* lock) /*!< in: lock */ -{ - ut_a(lock_get_type_low(lock) == LOCK_REC); - - return(lock->un_member.rec_lock.space); -} - -/*******************************************************************//** -For a record lock, gets the page number on which the lock is. -@return page number */ -ulint -lock_rec_get_page_no( -/*=================*/ - const lock_t* lock) /*!< in: lock */ -{ - ut_a(lock_get_type_low(lock) == LOCK_REC); - - return(lock->un_member.rec_lock.page_no); -} - /*********************************************************************//** Cancels a waiting lock request and releases possible other transactions waiting behind it. */ @@ -7030,6 +6937,7 @@ DeadlockChecker::check_and_resolve(const lock_t* lock, trx_t* trx) rollback_print(victim_trx, lock); MONITOR_INC(MONITOR_DEADLOCK); + srv_stats.lock_deadlock_count.inc(); break; @@ -7042,6 +6950,7 @@ DeadlockChecker::check_and_resolve(const lock_t* lock, trx_t* trx) lock_deadlock_found = true; MONITOR_INC(MONITOR_DEADLOCK); + srv_stats.lock_deadlock_count.inc(); } } while (victim_trx != NULL && victim_trx != trx); |