drop-in-tx.diff
application/octet-stream
Filename: drop-in-tx.diff
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/storage/buffer/bufmgr.c | 3 | 4 |
| src/backend/storage/smgr/smgr.c | 10 | 4 |
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 716d795..3dc7dae 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -2113,7 +2113,6 @@ DropRelFileNodeAllBuffers(RelFileNodeBackend *rnodes, int nnodes)
for (i = 0; i < NBuffers; i++)
{
-
RelFileNodeBackend *rnode = NULL;
volatile BufferDesc *bufHdr = &BufferDescriptors[i];
@@ -2125,8 +2124,9 @@ DropRelFileNodeAllBuffers(RelFileNodeBackend *rnodes, int nnodes)
rnode = rnodes;
- } else {
-
+ }
+ else
+ {
rnode = bsearch((const void *) &(bufHdr->tag.rnode),
rnodes,
nnodes, sizeof(RelFileNodeBackend),
@@ -2135,7 +2135,6 @@ DropRelFileNodeAllBuffers(RelFileNodeBackend *rnodes, int nnodes)
/* buffer does not belong to any of the relations */
if (rnode == NULL)
continue;
-
}
LockBufHdr(bufHdr);
diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c
index 40a9d0b..fb9f8ab 100644
--- a/src/backend/storage/smgr/smgr.c
+++ b/src/backend/storage/smgr/smgr.c
@@ -422,9 +422,11 @@ smgrdounlink(SMgrRelation reln, bool isRedo)
void smgrdounlinkall(SMgrRelation * rels, int nrels, bool isRedo)
{
int i = 0;
- RelFileNodeBackend rnodes[nrels];
+ RelFileNodeBackend *rnodes;
ForkNumber forknum;
+ /* initialize an array which contains all relations to be dropped */
+ rnodes = palloc(sizeof(RelFileNodeBackend) * nrels);
for (i = 0; i < nrels; i++)
{
RelFileNodeBackend rnode = rels[i]->smgr_rnode;
@@ -458,7 +460,8 @@ void smgrdounlinkall(SMgrRelation * rels, int nrels, bool isRedo)
* this backend, too, and thereby provide a backstop that we closed our
* own smgr rel.
*/
- for (i = 0; i < nrels; i++) {
+ for (i = 0; i < nrels; i++)
+ {
CacheInvalidateSmgr(rnodes[i]);
}
@@ -470,11 +473,14 @@ void smgrdounlinkall(SMgrRelation * rels, int nrels, bool isRedo)
* xact.
*/
- for (i = 0; i < nrels; i++) {
- int which = rels[i]->smgr_which;
+ for (i = 0; i < nrels; i++)
+ {
+ int which = rels[i]->smgr_which;
for (forknum = 0; forknum <= MAX_FORKNUM; forknum++)
(*(smgrsw[which].smgr_unlink)) (rnodes[i], forknum, isRedo);
}
+
+ pfree(rnodes);
}
/*