Remove cleared precedence blocks from high precedence queue
| 2649 | |
| 2650 | // Remove cleared precedence blocks from high precedence queue |
| 2651 | static void purgePrecedence(BufferControl* bcb, BufferDesc* bdb) |
| 2652 | { |
| 2653 | Sync precSync(&bcb->bcb_syncPrecedence, "purgePrecedence"); |
| 2654 | precSync.lock(SYNC_EXCLUSIVE); |
| 2655 | |
| 2656 | QUE que_prec = bdb->bdb_higher.que_forward, next_prec; |
| 2657 | for (; que_prec != &bdb->bdb_higher; que_prec = next_prec) |
| 2658 | { |
| 2659 | next_prec = que_prec->que_forward; |
| 2660 | |
| 2661 | Precedence* precedence = BLOCK(que_prec, Precedence, pre_higher); |
| 2662 | if (precedence->pre_flags & PRE_cleared) |
| 2663 | { |
| 2664 | QUE_DELETE(precedence->pre_higher); |
| 2665 | QUE_DELETE(precedence->pre_lower); |
| 2666 | precedence->pre_hi = (BufferDesc*) bcb->bcb_free; |
| 2667 | bcb->bcb_free = precedence; |
| 2668 | } |
| 2669 | } |
| 2670 | } |
| 2671 | |
| 2672 | // Collect pages modified by given or system transaction and write it to disk. |
| 2673 | // See also comments in flushPages. |
no test coverage detected