1
1
/*****************************************************************************
3
Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved.
3
Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
4
4
Copyright (c) 2008, Google Inc.
6
6
Portions of this file contain modifications contributed and copyrighted by
1083
1083
sync_thread_add_level(
1084
1084
/*==================*/
1085
1085
void* latch, /*!< in: pointer to a mutex or an rw-lock */
1086
ulint level) /*!< in: level in the latching order; if
1086
ulint level, /*!< in: level in the latching order; if
1087
1087
SYNC_LEVEL_VARYING, nothing is done */
1088
ibool relock) /*!< in: TRUE if re-entering an x-lock */
1089
1090
sync_level_t* array;
1090
1091
sync_level_t* slot;
1168
1172
case SYNC_DICT_HEADER:
1169
1173
case SYNC_TRX_I_S_RWLOCK:
1170
1174
case SYNC_TRX_I_S_LAST_READ:
1175
case SYNC_IBUF_MUTEX:
1171
1176
if (!sync_thread_levels_g(array, level, TRUE)) {
1172
1177
fprintf(stderr,
1173
1178
"InnoDB: sync_thread_levels_g(array, %lu)"
1231
1236
|| sync_thread_levels_g(array, SYNC_TREE_NODE - 1, TRUE));
1233
1238
case SYNC_TREE_NODE_NEW:
1234
ut_a(sync_thread_levels_contain(array, SYNC_FSP_PAGE)
1235
|| sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1239
ut_a(sync_thread_levels_contain(array, SYNC_FSP_PAGE));
1237
1241
case SYNC_INDEX_TREE:
1238
if (sync_thread_levels_contain(array, SYNC_IBUF_MUTEX)
1239
&& sync_thread_levels_contain(array, SYNC_FSP)) {
1240
ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1,
1242
ut_a(sync_thread_levels_g(array, SYNC_TREE_NODE - 1, TRUE));
1244
case SYNC_IBUF_TREE_NODE:
1245
ut_a(sync_thread_levels_contain(array, SYNC_IBUF_INDEX_TREE)
1246
|| sync_thread_levels_g(array, SYNC_IBUF_TREE_NODE - 1,
1249
case SYNC_IBUF_TREE_NODE_NEW:
1250
/* ibuf_add_free_page() allocates new pages for the
1251
change buffer while only holding the tablespace
1252
x-latch. These pre-allocated new pages may only be
1253
taken in use while holding ibuf_mutex, in
1254
btr_page_alloc_for_ibuf(). */
1255
ut_a(sync_thread_levels_contain(array, SYNC_IBUF_MUTEX)
1256
|| sync_thread_levels_contain(array, SYNC_FSP));
1258
case SYNC_IBUF_INDEX_TREE:
1259
if (sync_thread_levels_contain(array, SYNC_FSP)) {
1260
ut_a(sync_thread_levels_g(array, level - 1, TRUE));
1243
ut_a(sync_thread_levels_g(array, SYNC_TREE_NODE - 1,
1262
ut_a(sync_thread_levels_g(
1263
array, SYNC_IBUF_TREE_NODE - 1, TRUE));
1247
case SYNC_IBUF_MUTEX:
1248
ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1, TRUE));
1250
1266
case SYNC_IBUF_PESS_INSERT_MUTEX:
1251
1267
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1, TRUE));
1252
1268
ut_a(!sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));