| 5095 | } |
| 5096 | |
| 5097 | void recentlyUsed(BufferDesc* bdb) |
| 5098 | { |
| 5099 | const AtomicCounter::counter_type oldFlags = bdb->bdb_flags.exchangeBitOr(BDB_lru_chained); |
| 5100 | if (oldFlags & BDB_lru_chained) |
| 5101 | return; |
| 5102 | |
| 5103 | BufferControl* bcb = bdb->bdb_bcb; |
| 5104 | |
| 5105 | #ifdef DEV_BUILD |
| 5106 | volatile BufferDesc* chain = bcb->bcb_lru_chain; |
| 5107 | for (; chain; chain = chain->bdb_lru_chain) |
| 5108 | { |
| 5109 | if (chain == bdb) |
| 5110 | BUGCHECK(-1); // !! |
| 5111 | } |
| 5112 | #endif |
| 5113 | for (;;) |
| 5114 | { |
| 5115 | bdb->bdb_lru_chain = bcb->bcb_lru_chain; |
| 5116 | if (bcb->bcb_lru_chain.compare_exchange_strong(bdb->bdb_lru_chain, bdb)) |
| 5117 | break; |
| 5118 | } |
| 5119 | } |
| 5120 | |
| 5121 | |
| 5122 | void requeueRecentlyUsed(BufferControl* bcb) |
no test coverage detected