Commit 468df81b authored by vasil's avatar vasil

branches/zip:

Add the proper macros for checking the correct latching order in trx
information_schema code.

Approved by:	Marko
parent 75e12d48
...@@ -383,9 +383,10 @@ or row lock! */ ...@@ -383,9 +383,10 @@ or row lock! */
their level set after the page is their level set after the page is
locked; see e.g. locked; see e.g.
ibuf_bitmap_get_map_page(). */ ibuf_bitmap_get_map_page(). */
#define SYNC_INFORMATION_SCHEMA 1900 /* Used when latching #define SYNC_TRX_I_S_RWLOCK 1910 /* Used for
INFORMATION SCHEMA internal trx_i_s_cache_t::rw_lock */
structures. */ #define SYNC_TRX_I_S_LAST_READ 1900 /* Used for
trx_i_s_cache_t::last_read_mutex */
#define SYNC_DICT_OPERATION 1001 /* table create, drop, etc. reserve #define SYNC_DICT_OPERATION 1001 /* table create, drop, etc. reserve
this in X-mode, implicit or backround this in X-mode, implicit or backround
operations purge, rollback, foreign operations purge, rollback, foreign
......
...@@ -1036,6 +1036,8 @@ sync_thread_add_level( ...@@ -1036,6 +1036,8 @@ sync_thread_add_level(
case SYNC_DICT_AUTOINC_MUTEX: case SYNC_DICT_AUTOINC_MUTEX:
case SYNC_DICT_OPERATION: case SYNC_DICT_OPERATION:
case SYNC_DICT_HEADER: case SYNC_DICT_HEADER:
case SYNC_TRX_I_S_RWLOCK:
case SYNC_TRX_I_S_LAST_READ:
if (!sync_thread_levels_g(array, level)) { if (!sync_thread_levels_g(array, level)) {
fprintf(stderr, fprintf(stderr,
"InnoDB: sync_thread_levels_g(array, %lu)" "InnoDB: sync_thread_levels_g(array, %lu)"
......
...@@ -834,11 +834,21 @@ trx_i_s_cache_init( ...@@ -834,11 +834,21 @@ trx_i_s_cache_init(
/*===============*/ /*===============*/
trx_i_s_cache_t* cache) /* out: cache to init */ trx_i_s_cache_t* cache) /* out: cache to init */
{ {
rw_lock_create(&cache->rw_lock, SYNC_INFORMATION_SCHEMA); /* The latching is done in the following order:
acquire trx_i_s_cache_t::rw_lock, X
acquire kernel_mutex
release kernel_mutex
release trx_i_s_cache_t::rw_lock
acquire trx_i_s_cache_t::rw_lock, S
acquire trx_i_s_cache_t::last_read_mutex
release trx_i_s_cache_t::last_read_mutex
release trx_i_s_cache_t::rw_lock */
rw_lock_create(&cache->rw_lock, SYNC_TRX_I_S_RWLOCK);
cache->last_read = 0; cache->last_read = 0;
mutex_create(&cache->last_read_mutex, SYNC_INFORMATION_SCHEMA); mutex_create(&cache->last_read_mutex, SYNC_TRX_I_S_LAST_READ);
table_cache_init(&cache->innodb_trx, sizeof(i_s_trx_row_t)); table_cache_init(&cache->innodb_trx, sizeof(i_s_trx_row_t));
table_cache_init(&cache->innodb_locks, sizeof(i_s_locks_row_t)); table_cache_init(&cache->innodb_locks, sizeof(i_s_locks_row_t));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment