18
18
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
20
20
You should have received a copy of the GNU General Public License along with
21
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
22
Place, Suite 330, Boston, MA 02111-1307 USA
21
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
22
St, Fifth Floor, Boston, MA 02110-1301 USA
24
24
*****************************************************************************/
1100
1107
case SYNC_DICT_HEADER:
1101
1108
case SYNC_TRX_I_S_RWLOCK:
1102
1109
case SYNC_TRX_I_S_LAST_READ:
1103
if (!sync_thread_levels_g(array, level)) {
1110
if (!sync_thread_levels_g(array, level, TRUE)) {
1104
1111
fprintf(stderr,
1105
1112
"InnoDB: sync_thread_levels_g(array, %lu)"
1106
1113
" does not hold!\n", level);
1111
1118
/* Either the thread must own the buffer pool mutex
1112
1119
(buf_pool_mutex), or it is allowed to latch only ONE
1113
1120
buffer block (block->mutex or buf_pool_zip_mutex). */
1114
if (!sync_thread_levels_g(array, level)) {
1115
ut_a(sync_thread_levels_g(array, level - 1));
1121
if (!sync_thread_levels_g(array, level, FALSE)) {
1122
ut_a(sync_thread_levels_g(array, level - 1, TRUE));
1116
1123
ut_a(sync_thread_levels_contain(array, SYNC_BUF_POOL));
1119
1126
case SYNC_REC_LOCK:
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));
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));
1124
1134
case SYNC_IBUF_BITMAP:
1125
1135
/* Either the thread must own the master mutex to all
1126
1136
the bitmap pages, or it is allowed to latch only ONE
1127
1137
bitmap page. */
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));
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,
1132
1147
case SYNC_FSP_PAGE:
1133
1148
ut_a(sync_thread_levels_contain(array, SYNC_FSP));
1136
1151
ut_a(sync_thread_levels_contain(array, SYNC_FSP)
1137
|| sync_thread_levels_g(array, SYNC_FSP));
1152
|| sync_thread_levels_g(array, SYNC_FSP, TRUE));
1139
1154
case SYNC_TRX_UNDO_PAGE:
1140
1155
ut_a(sync_thread_levels_contain(array, SYNC_TRX_UNDO)
1141
1156
|| sync_thread_levels_contain(array, SYNC_RSEG)
1142
1157
|| sync_thread_levels_contain(array, SYNC_PURGE_SYS)
1143
|| sync_thread_levels_g(array, SYNC_TRX_UNDO_PAGE));
1158
|| sync_thread_levels_g(array, SYNC_TRX_UNDO_PAGE, TRUE));
1145
1160
case SYNC_RSEG_HEADER:
1146
1161
ut_a(sync_thread_levels_contain(array, SYNC_RSEG));
1152
1167
case SYNC_TREE_NODE:
1153
1168
ut_a(sync_thread_levels_contain(array, SYNC_INDEX_TREE)
1154
1169
|| sync_thread_levels_contain(array, SYNC_DICT_OPERATION)
1155
|| sync_thread_levels_g(array, SYNC_TREE_NODE - 1));
1170
|| sync_thread_levels_g(array, SYNC_TREE_NODE - 1, TRUE));
1157
1172
case SYNC_TREE_NODE_NEW:
1158
1173
ut_a(sync_thread_levels_contain(array, SYNC_FSP_PAGE)
1159
1174
|| sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1161
1176
case SYNC_INDEX_TREE:
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));
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,
1167
1186
case SYNC_IBUF_MUTEX:
1168
ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1));
1187
ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1, TRUE));
1170
1189
case SYNC_IBUF_PESS_INSERT_MUTEX:
1171
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1)
1172
&& !sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1190
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1, TRUE));
1191
ut_a(!sync_thread_levels_contain(array, SYNC_IBUF_MUTEX));
1174
1193
case SYNC_IBUF_HEADER:
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));
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));
1180
1199
case SYNC_DICT:
1181
1200
#ifdef UNIV_DEBUG
1182
1201
ut_a(buf_debug_prints
1183
|| sync_thread_levels_g(array, SYNC_DICT));
1202
|| sync_thread_levels_g(array, SYNC_DICT, TRUE));
1184
1203
#else /* UNIV_DEBUG */
1185
ut_a(sync_thread_levels_g(array, SYNC_DICT));
1204
ut_a(sync_thread_levels_g(array, SYNC_DICT, TRUE));
1186
1205
#endif /* UNIV_DEBUG */
1358
1377
mutex_free(&mutex_list_mutex);
1359
1378
#ifdef UNIV_SYNC_DEBUG
1360
1379
mutex_free(&sync_thread_mutex);
1381
/* Switch latching order checks on in sync0sync.c */
1382
sync_order_checks_on = FALSE;
1361
1383
#endif /* UNIV_SYNC_DEBUG */
1385
sync_initialized = FALSE;
1364
1388
/*******************************************************************//**