MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / clear_precedence

Function clear_precedence

src/jrd/cch.cpp:3325–3366  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3323
3324
3325static void clear_precedence(thread_db* tdbb, BufferDesc* bdb)
3326{
3327/**************************************
3328 *
3329 * c l e a r _ p r e c e d e n c e
3330 *
3331 **************************************
3332 *
3333 * Functional description
3334 * Clear precedence relationships to lower precedence block.
3335 *
3336 **************************************/
3337 SET_TDBB(tdbb);
3338
3339 if (QUE_EMPTY(bdb->bdb_lower))
3340 return;
3341
3342 BufferControl* const bcb = bdb->bdb_bcb;
3343 Sync precSync(&bcb->bcb_syncPrecedence, "clear_precedence");
3344 if (!bcb->bcb_syncPrecedence.ourExclusiveLock())
3345 precSync.lock(SYNC_EXCLUSIVE);
3346
3347 // Loop thru lower precedence buffers. If any can be downgraded,
3348 // by all means down grade them.
3349
3350 while (QUE_NOT_EMPTY(bdb->bdb_lower))
3351 {
3352 QUE que_inst = bdb->bdb_lower.que_forward;
3353 Precedence* precedence = BLOCK(que_inst, Precedence, pre_lower);
3354 BufferDesc* low_bdb = precedence->pre_low;
3355 QUE_DELETE(precedence->pre_higher);
3356 QUE_DELETE(precedence->pre_lower);
3357
3358 precedence->pre_hi = (BufferDesc*) bcb->bcb_free;
3359 bcb->bcb_free = precedence;
3360 if (!(precedence->pre_flags & PRE_cleared))
3361 {
3362 if (low_bdb->bdb_ast_flags & BDB_blocking)
3363 PAGE_LOCK_RE_POST(tdbb, bcb, low_bdb->bdb_lock);
3364 }
3365 }
3366}
3367
3368
3369static void down_grade(thread_db* tdbb, BufferDesc* bdb, int high)

Callers 3

CCH_fakeFunction · 0.85
get_oldest_bufferFunction · 0.85
write_bufferFunction · 0.85

Calls 7

SET_TDBBFunction · 0.85
QUE_EMPTYFunction · 0.85
QUE_NOT_EMPTYFunction · 0.85
QUE_DELETEFunction · 0.85
PAGE_LOCK_RE_POSTFunction · 0.85
ourExclusiveLockMethod · 0.45
lockMethod · 0.45

Tested by

no test coverage detected