* LogLogicalInvalidations * * Emit WAL for invalidations. This is currently only used for logging * invalidations at the command end or at commit time if any invalidations * are pending. */
| 1615 | * are pending. |
| 1616 | */ |
| 1617 | void |
| 1618 | LogLogicalInvalidations() |
| 1619 | { |
| 1620 | xl_xact_invals xlrec; |
| 1621 | SharedInvalidationMessage *invalMessages; |
| 1622 | int nmsgs = 0; |
| 1623 | |
| 1624 | /* Quick exit if we haven't done anything with invalidation messages. */ |
| 1625 | if (transInvalInfo == NULL) |
| 1626 | return; |
| 1627 | |
| 1628 | ProcessInvalidationMessagesMulti(&transInvalInfo->CurrentCmdInvalidMsgs, |
| 1629 | MakeSharedInvalidMessagesArray); |
| 1630 | |
| 1631 | Assert(!(numSharedInvalidMessagesArray > 0 && |
| 1632 | SharedInvalidMessagesArray == NULL)); |
| 1633 | |
| 1634 | invalMessages = SharedInvalidMessagesArray; |
| 1635 | nmsgs = numSharedInvalidMessagesArray; |
| 1636 | SharedInvalidMessagesArray = NULL; |
| 1637 | numSharedInvalidMessagesArray = 0; |
| 1638 | |
| 1639 | if (nmsgs > 0) |
| 1640 | { |
| 1641 | /* prepare record */ |
| 1642 | memset(&xlrec, 0, MinSizeOfXactInvals); |
| 1643 | xlrec.nmsgs = nmsgs; |
| 1644 | |
| 1645 | /* perform insertion */ |
| 1646 | XLogBeginInsert(); |
| 1647 | XLogRegisterData((char *) (&xlrec), MinSizeOfXactInvals); |
| 1648 | XLogRegisterData((char *) invalMessages, |
| 1649 | nmsgs * sizeof(SharedInvalidationMessage)); |
| 1650 | XLogInsert(RM_XACT_ID, XLOG_XACT_INVALIDATIONS); |
| 1651 | |
| 1652 | pfree(invalMessages); |
| 1653 | } |
| 1654 | } |
no test coverage detected