diff options
Diffstat (limited to 'storage/innobase/trx')
-rw-r--r-- | storage/innobase/trx/trx0purge.cc | 2 | ||||
-rw-r--r-- | storage/innobase/trx/trx0roll.cc | 2 | ||||
-rw-r--r-- | storage/innobase/trx/trx0trx.cc | 94 |
3 files changed, 35 insertions, 63 deletions
diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc index d8495dfa7a5..ba2b73aa8b6 100644 --- a/storage/innobase/trx/trx0purge.cc +++ b/storage/innobase/trx/trx0purge.cc @@ -193,7 +193,7 @@ void purge_sys_t::close() ut_ad(!trx->id); ut_ad(trx->state == TRX_STATE_ACTIVE); trx->state = TRX_STATE_NOT_STARTED; - trx_free_for_background(trx); + trx_free(trx); rw_lock_free(&latch); /* rw_lock_free() already called latch.~rw_lock_t(); tame the debug assertions when the destructor will be called once more. */ diff --git a/storage/innobase/trx/trx0roll.cc b/storage/innobase/trx/trx0roll.cc index b3d590482e0..6874f929726 100644 --- a/storage/innobase/trx/trx0roll.cc +++ b/storage/innobase/trx/trx0roll.cc @@ -833,7 +833,7 @@ discard: trx_free_at_shutdown(trx); } else - trx_free_for_background(trx); + trx_free(trx); } } } diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 1c93f76bd60..aad5c47d42b 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -431,49 +431,10 @@ trx_t *trx_create() } /** -Release a trx_t instance back to the pool. -@param trx the instance to release. */ -static -void -trx_free(trx_t*& trx) -{ - mutex_enter(&trx_sys.mutex); - UT_LIST_REMOVE(trx_sys.trx_list, trx); - mutex_exit(&trx_sys.mutex); - - assert_trx_is_free(trx); - - trx_sys.rw_trx_hash.put_pins(trx); - trx->mysql_thd = 0; - trx->mysql_log_file_name = 0; - - // FIXME: We need to avoid this heap free/alloc for each commit. - if (trx->autoinc_locks != NULL) { - ut_ad(ib_vector_is_empty(trx->autoinc_locks)); - /* We allocated a dedicated heap for the vector. */ - ib_vector_free(trx->autoinc_locks); - trx->autoinc_locks = NULL; - } - - trx->mod_tables.clear(); - - ut_ad(!trx->read_view.is_open()); - trx->read_view.close(); - - /* trx locking state should have been reset before returning trx - to pool */ - ut_ad(trx->will_lock == 0); - - trx_pools->mem_free(trx); - - trx = NULL; -} - -/** Check state of transaction before freeing it. -@param trx trx object to validate */ -static -void -trx_validate_state_before_free(trx_t* trx) + Release a trx_t instance back to the pool. + @param trx the instance to release. +*/ +void trx_free(trx_t*& trx) { ut_ad(!trx->declared_to_be_inside_innodb); ut_ad(!trx->n_mysql_tables_in_use); @@ -510,16 +471,37 @@ trx_validate_state_before_free(trx_t* trx) trx->dict_operation = TRX_DICT_OP_NONE; assert_trx_is_inactive(trx); -} -/** Free a transaction that was allocated by background or user threads. -@param trx trx object to free */ -void -trx_free_for_background(trx_t* trx) -{ - trx_validate_state_before_free(trx); + mutex_enter(&trx_sys.mutex); + UT_LIST_REMOVE(trx_sys.trx_list, trx); + mutex_exit(&trx_sys.mutex); - trx_free(trx); + assert_trx_is_free(trx); + + trx_sys.rw_trx_hash.put_pins(trx); + trx->mysql_thd = 0; + trx->mysql_log_file_name = 0; + + // FIXME: We need to avoid this heap free/alloc for each commit. + if (trx->autoinc_locks != NULL) { + ut_ad(ib_vector_is_empty(trx->autoinc_locks)); + /* We allocated a dedicated heap for the vector. */ + ib_vector_free(trx->autoinc_locks); + trx->autoinc_locks = NULL; + } + + trx->mod_tables.clear(); + + ut_ad(!trx->read_view.is_open()); + trx->read_view.close(); + + /* trx locking state should have been reset before returning trx + to pool */ + ut_ad(trx->will_lock == 0); + + trx_pools->mem_free(trx); + + trx = NULL; } /** At shutdown, frees a transaction object. */ @@ -573,16 +555,6 @@ void trx_disconnect_prepared(trx_t *trx) trx->will_lock= 0; } -/** - Free a transaction object for MySQL - @param[in,out] trx transaction -*/ -void trx_free_for_mysql(trx_t *trx) -{ - ut_ad(trx->mysql_thd); - trx_free_for_background(trx); -} - /****************************************************************//** Resurrect the table locks for a resurrected transaction. */ static |