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

Function PAG_release_pages

src/jrd/pag.cpp:1577–1666  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1575
1576
1577void PAG_release_pages(thread_db* tdbb, USHORT pageSpaceID, int cntRelease,
1578 const ULONG* pgNums, const ULONG prior_page)
1579{
1580/**************************************
1581 *
1582 * P A G _ r e l e a s e _ p a g e s
1583 *
1584 **************************************
1585 *
1586 * Functional description
1587 * Release a few pages to the free page page.
1588 *
1589 **************************************/
1590
1591 SET_TDBB(tdbb);
1592 Database* dbb = tdbb->getDatabase();
1593 CHECK_DBB(dbb);
1594
1595 PageManager& pageMgr = dbb->dbb_page_manager;
1596 PageSpace* pageSpace = pageMgr.findPageSpace(pageSpaceID);
1597 fb_assert(pageSpace);
1598
1599 WIN pip_window(pageSpaceID, -1);
1600 page_inv_page* pages = NULL;
1601 ULONG sequence = 0;
1602
1603#ifdef VIO_DEBUG
1604 string dbg = "PAG_release_pages: about to release pages: ";
1605#endif
1606
1607 for (int i = 0; i < cntRelease; i++)
1608 {
1609#ifdef VIO_DEBUG
1610 if (i > 0)
1611 dbg.append(", ");
1612
1613 char num[16];
1614 _ltoa_s(pgNums[i], num, sizeof(num), 10);
1615 dbg.append(num);
1616#endif
1617
1618 const ULONG seq = pgNums[i] / pageMgr.pagesPerPIP;
1619
1620 if (!pages || seq != sequence)
1621 {
1622 if (pages)
1623 {
1624 pageSpace->pipHighWater.exchangeLower(sequence);
1625 if (pages->pip_extent < pageMgr.pagesPerPIP)
1626 pageSpace->pipWithExtent.exchangeLower(sequence);
1627
1628 CCH_RELEASE(tdbb, &pip_window);
1629 }
1630
1631 sequence = seq;
1632 pip_window.win_page = (sequence == 0) ?
1633 pageSpace->pipFirst : sequence * pageMgr.pagesPerPIP - 1;
1634

Callers 1

PAG_release_pageFunction · 0.85

Calls 15

SET_TDBBFunction · 0.85
CHECK_DBBFunction · 0.85
CCH_RELEASEFunction · 0.85
CCH_FETCHFunction · 0.85
CCH_precedenceFunction · 0.85
CCH_MARKFunction · 0.85
VIO_traceFunction · 0.85
CCH_clean_pageFunction · 0.85
getDatabaseMethod · 0.80
findPageSpaceMethod · 0.80
exchangeLowerMethod · 0.80
PageNumberClass · 0.70

Tested by

no test coverage detected