---------- * afterTriggerRestoreEventList() * * Restore an event list to its prior length, removing all the events * added since it had the value old_events. * ---------- */
| 3889 | * ---------- |
| 3890 | */ |
| 3891 | static void |
| 3892 | afterTriggerRestoreEventList(AfterTriggerEventList *events, |
| 3893 | const AfterTriggerEventList *old_events) |
| 3894 | { |
| 3895 | AfterTriggerEventChunk *chunk; |
| 3896 | AfterTriggerEventChunk *next_chunk; |
| 3897 | |
| 3898 | if (old_events->tail == NULL) |
| 3899 | { |
| 3900 | /* restoring to a completely empty state, so free everything */ |
| 3901 | afterTriggerFreeEventList(events); |
| 3902 | } |
| 3903 | else |
| 3904 | { |
| 3905 | *events = *old_events; |
| 3906 | /* free any chunks after the last one we want to keep */ |
| 3907 | for (chunk = events->tail->next; chunk != NULL; chunk = next_chunk) |
| 3908 | { |
| 3909 | next_chunk = chunk->next; |
| 3910 | pfree(chunk); |
| 3911 | } |
| 3912 | /* and clean up the tail chunk to be the right length */ |
| 3913 | events->tail->next = NULL; |
| 3914 | events->tail->freeptr = events->tailfree; |
| 3915 | |
| 3916 | /* |
| 3917 | * We don't make any effort to remove now-unused shared data records. |
| 3918 | * They might still be useful, anyway. |
| 3919 | */ |
| 3920 | } |
| 3921 | } |
| 3922 | |
| 3923 | /* ---------- |
| 3924 | * afterTriggerDeleteHeadEventChunk() |
no test coverage detected