1107
1100
case SYNC_DICT_HEADER:
1108
1101
case SYNC_TRX_I_S_RWLOCK:
1109
1102
case SYNC_TRX_I_S_LAST_READ:
1110
if (!sync_thread_levels_g(array, level, TRUE)) {
1103
if (!sync_thread_levels_g(array, level)) {
1111
1104
fprintf(stderr,
1112
1105
"InnoDB: sync_thread_levels_g(array, %lu)"
1113
1106
" does not hold!\n", level);
1118
1111
/* Either the thread must own the buffer pool mutex
1119
1112
(buf_pool_mutex), or it is allowed to latch only ONE
1120
1113
buffer block (block->mutex or buf_pool_zip_mutex). */
1121
if (!sync_thread_levels_g(array, level, FALSE)) {
1122
ut_a(sync_thread_levels_g(array, level - 1, TRUE));
1114
if (!sync_thread_levels_g(array, level)) {
1115
ut_a(sync_thread_levels_g(array, level - 1));
1123
1116
ut_a(sync_thread_levels_contain(array, SYNC_BUF_POOL));
1126
1119
case SYNC_REC_LOCK:
1127
if (sync_thread_levels_contain(array, SYNC_KERNEL)) {
1128
ut_a(sync_thread_levels_g(array, SYNC_REC_LOCK - 1,
1131
ut_a(sync_thread_levels_g(array, SYNC_REC_LOCK, TRUE));
1120
ut_a((sync_thread_levels_contain(array, SYNC_KERNEL)
1121
&& sync_thread_levels_g(array, SYNC_REC_LOCK - 1))
1122
|| sync_thread_levels_g(array, SYNC_REC_LOCK));
1134
1124
case SYNC_IBUF_BITMAP:
1135
1125
/* Either the thread must own the master mutex to all
1136
1126
the bitmap pages, or it is allowed to latch only ONE
1137
1127
bitmap page. */
1138
if (sync_thread_levels_contain(array,
1139
SYNC_IBUF_BITMAP_MUTEX)) {
1140
ut_a(sync_thread_levels_g(array, SYNC_IBUF_BITMAP - 1,
1143
ut_a(sync_thread_levels_g(array, SYNC_IBUF_BITMAP,
1128
ut_a((sync_thread_levels_contain(array, SYNC_IBUF_BITMAP_MUTEX)
1129
&& sync_thread_levels_g(array, SYNC_IBUF_BITMAP - 1))
1130
|| sync_thread_levels_g(array, SYNC_IBUF_BITMAP));
1147
1132
case SYNC_FSP_PAGE:
1148
1133
ut_a(sync_thread_levels_contain(array, SYNC_FSP));
1151
1136
ut_a(sync_thread_levels_contain(array, SYNC_FSP)
1152
|| sync_thread_levels_g(array, SYNC_FSP, TRUE));
1137
|| sync_thread_levels_g(array, SYNC_FSP));
1154
1139
case SYNC_TRX_UNDO_PAGE:
1155
1140
ut_a(sync_thread_levels_contain(array, SYNC_TRX_UNDO)
1156
1141
|| sync_thread_levels_contain(array, SYNC_RSEG)
1157
1142
|| sync_thread_levels_contain(array, SYNC_PURGE_SYS)
1158
|| sync_thread_levels_g(array, SYNC_TRX_UNDO_PAGE, TRUE));
1143
|| sync_thread_levels_g(array, SYNC_TRX_UNDO_PAGE));
1160
1145
case SYNC_RSEG_HEADER:
1161
1146
ut_a(sync_thread_levels_contain(array, SYNC_RSEG));
1167
1152
case SYNC_TREE_NODE:
1168
1153
ut_a(sync_thread_levels_contain(array, SYNC_INDEX_TREE)
1169
1154
|| sync_thread_levels_contain(array, SYNC_DICT_OPERATION)
1170
|| sync_thread_levels_g(array, SYNC_TREE_NODE - 1, TRUE));
1155
|| sync_thread_levels_g(array, SYNC_TREE_NODE - 1));
1172
1157
case SYNC_TREE_NODE_NEW:
1173
1158
ut_a(sync_thread_levels_contain(array, SYNC_FSP_PAGE)
1174
1159
|| sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1176
1161
case SYNC_INDEX_TREE:
1177
if (sync_thread_levels_contain(array, SYNC_IBUF_MUTEX)
1178
&& sync_thread_levels_contain(array, SYNC_FSP)) {
1179
ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1,
1182
ut_a(sync_thread_levels_g(array, SYNC_TREE_NODE - 1,
1162
ut_a((sync_thread_levels_contain(array, SYNC_IBUF_MUTEX)
1163
&& sync_thread_levels_contain(array, SYNC_FSP)
1164
&& sync_thread_levels_g(array, SYNC_FSP_PAGE - 1))
1165
|| sync_thread_levels_g(array, SYNC_TREE_NODE - 1));
1186
1167
case SYNC_IBUF_MUTEX:
1187
ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1, TRUE));
1168
ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1));
1189
1170
case SYNC_IBUF_PESS_INSERT_MUTEX:
1190
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1, TRUE));
1191
ut_a(!sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1171
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1)
1172
&& !sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1193
1174
case SYNC_IBUF_HEADER:
1194
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1, TRUE));
1195
ut_a(!sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1196
ut_a(!sync_thread_levels_contain(array,
1197
SYNC_IBUF_PESS_INSERT_MUTEX));
1175
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1)
1176
&& !sync_thread_levels_contain(array, SYNC_IBUF_MUTEX)
1177
&& !sync_thread_levels_contain(
1178
array, SYNC_IBUF_PESS_INSERT_MUTEX));
1199
1180
case SYNC_DICT:
1200
1181
#ifdef UNIV_DEBUG
1201
1182
ut_a(buf_debug_prints
1202
|| sync_thread_levels_g(array, SYNC_DICT, TRUE));
1183
|| sync_thread_levels_g(array, SYNC_DICT));
1203
1184
#else /* UNIV_DEBUG */
1204
ut_a(sync_thread_levels_g(array, SYNC_DICT, TRUE));
1185
ut_a(sync_thread_levels_g(array, SYNC_DICT));
1205
1186
#endif /* UNIV_DEBUG */