MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / unlink_block

Function unlink_block

mysys/mf_keycache.c:1228–1267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1226*/
1227
1228static void unlink_block(KEY_CACHE *keycache, BLOCK_LINK *block)
1229{
1230 DBUG_ASSERT((block->status & ~BLOCK_CHANGED) == (BLOCK_READ | BLOCK_IN_USE));
1231 DBUG_ASSERT(block->hash_link); /*backptr to block NULL from free_block()*/
1232 DBUG_ASSERT(!block->requests);
1233 DBUG_ASSERT(block->prev_changed && *block->prev_changed == block);
1234 DBUG_ASSERT(block->next_used && block->prev_used &&
1235 (block->next_used->prev_used == &block->next_used) &&
1236 (*block->prev_used == block));
1237 if (block->next_used == block)
1238 /* The list contains only one member */
1239 keycache->used_last= keycache->used_ins= NULL;
1240 else
1241 {
1242 block->next_used->prev_used= block->prev_used;
1243 *block->prev_used= block->next_used;
1244 if (keycache->used_last == block)
1245 keycache->used_last= STRUCT_PTR(BLOCK_LINK, next_used, block->prev_used);
1246 if (keycache->used_ins == block)
1247 keycache->used_ins=STRUCT_PTR(BLOCK_LINK, next_used, block->prev_used);
1248 }
1249 block->next_used= NULL;
1250#if !defined(DBUG_OFF)
1251 /*
1252 This makes it easier to see it's not in a chain during debugging.
1253 And some DBUG_ASSERT() rely on it.
1254 */
1255 block->prev_used= NULL;
1256#endif
1257
1258 KEYCACHE_THREAD_TRACE("unlink_block");
1259#if defined(KEYCACHE_DEBUG)
1260 KEYCACHE_DBUG_ASSERT(keycache->blocks_available != 0);
1261 keycache->blocks_available--;
1262 KEYCACHE_DBUG_PRINT("unlink_block",
1263 ("unlinked block %u status=%x #requests=%u #available=%u",
1264 BLOCK_NUMBER(block), block->status,
1265 block->requests, keycache->blocks_available));
1266#endif
1267}
1268
1269
1270/*

Callers 3

reg_requestsFunction · 0.85
unreg_requestFunction · 0.85
free_blockFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected