Skip to content

Commit 8c9990b

Browse files
committed
Fix CFS warnings by adding cfs_on_exit_callback function
1 parent b4d2b44 commit 8c9990b

File tree

8 files changed

+34
-28
lines changed

8 files changed

+34
-28
lines changed

src/backend/commands/trigger.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5017,7 +5017,7 @@ AfterTriggerSaveEvent(EState *estate, ResultRelInfo *relinfo,
50175017
void *
50185018
TriggerSuspend(void)
50195019
{
5020-
AfterTriggersData *state = malloc(sizeof(AfterTriggersData));
5020+
AfterTriggersData *state = (AfterTriggersData*)MemoryContextAlloc(TopMemoryContext, sizeof(AfterTriggersData));
50215021
*state = afterTriggers;
50225022
memset(&afterTriggers, 0, sizeof(afterTriggers));
50235023
AfterTriggerBeginXact();
@@ -5028,7 +5028,7 @@ void
50285028
TriggerResume(void *state)
50295029
{
50305030
afterTriggers = *(AfterTriggersData *)state;
5031-
free(state);
5031+
pfree(state);
50325032
}
50335033

50345034
Datum

src/backend/executor/spi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2746,7 +2746,7 @@ _SPI_save_plan(SPIPlanPtr plan)
27462746
void *
27472747
SuspendSPI(void)
27482748
{
2749-
SuspendedSPI *s = malloc(sizeof(SuspendedSPI));
2749+
SuspendedSPI *s = (SuspendedSPI*)MemoryContextAlloc(TopMemoryContext, sizeof(SuspendedSPI));
27502750

27512751
MOVELEFT(s->_SPI_stack, _SPI_stack, NULL);
27522752
MOVELEFT(s->_SPI_current, _SPI_current, NULL);
@@ -2768,5 +2768,5 @@ ResumeSPI(void *state)
27682768
_SPI_connected = s->_SPI_connected;
27692769
_SPI_curid = s->_SPI_curid;
27702770

2771-
free(state);
2771+
pfree(state);
27722772
}

src/backend/postmaster/pgstat.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5649,7 +5649,7 @@ typedef struct {
56495649
void *
56505650
PgStatSuspend(void)
56515651
{
5652-
SuspendedPgStat *sus = malloc(sizeof(SuspendedPgStat));
5652+
SuspendedPgStat *sus = (SuspendedPgStat*)MemoryContextAlloc(TopMemoryContext, sizeof(SuspendedPgStat));
56535653

56545654
MOVELEFT(sus->pgStatXactStack, pgStatXactStack, NULL);
56555655
MOVELEFT(sus->pgStatXactCommit, pgStatXactCommit, 0);
@@ -5671,5 +5671,5 @@ PgStatResume(void *src)
56715671
pgStatBlockReadTime = sus->pgStatBlockReadTime;
56725672
pgStatBlockWriteTime = sus->pgStatBlockWriteTime;
56735673

5674-
free(src);
5674+
pfree(src);
56755675
}

src/backend/storage/file/cfs.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1881,3 +1881,8 @@ Datum cfs_gc_activity_scanned_files(PG_FUNCTION_ARGS)
18811881
{
18821882
PG_RETURN_INT64(cfs_state->gc_stat.scannedFiles);
18831883
}
1884+
1885+
void cfs_on_exit_callback(int code, Datum arg)
1886+
{
1887+
cfs_control_gc_unlock();
1888+
}

src/backend/storage/file/copydir.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,27 +57,27 @@ copydir(char *fromdir, char *todir, bool recurse)
5757

5858
cfs_control_gc_lock(); /* disable GC during copy */
5959

60-
PG_ENSURE_ERROR_CLEANUP(cfs_control_gc_unlock, (Datum)NULL);
60+
PG_ENSURE_ERROR_CLEANUP(cfs_on_exit_callback, (Datum)NULL);
6161
{
6262
while ((xlde = ReadDir(xldir, fromdir)) != NULL)
6363
{
6464
struct stat fst;
65-
65+
6666
/* If we got a cancel signal during the copy of the directory, quit */
6767
CHECK_FOR_INTERRUPTS();
68-
68+
6969
if (strcmp(xlde->d_name, ".") == 0 ||
7070
strcmp(xlde->d_name, "..") == 0)
7171
continue;
72-
72+
7373
snprintf(fromfile, MAXPGPATH, "%s/%s", fromdir, xlde->d_name);
7474
snprintf(tofile, MAXPGPATH, "%s/%s", todir, xlde->d_name);
75-
75+
7676
if (lstat(fromfile, &fst) < 0)
7777
ereport(ERROR,
7878
(errcode_for_file_access(),
7979
errmsg("could not stat file \"%s\": %m", fromfile)));
80-
80+
8181
if (S_ISDIR(fst.st_mode))
8282
{
8383
/* recurse to handle subdirectories */
@@ -89,9 +89,9 @@ copydir(char *fromdir, char *todir, bool recurse)
8989
}
9090
FreeDir(xldir);
9191
}
92-
PG_END_ENSURE_ERROR_CLEANUP(cfs_control_gc_unlock, (Datum)NULL);
92+
PG_END_ENSURE_ERROR_CLEANUP(cfs_on_exit_callback, (Datum)NULL);
9393
cfs_control_gc_unlock();
94-
94+
9595
/*
9696
* Be paranoid here and fsync all files to ensure the copy is really done.
9797
* But if fsync is disabled, we're done.
@@ -164,35 +164,35 @@ copyzipdir(char *fromdir, bool from_compressed,
164164

165165
cfs_control_gc_lock(); /* disable GC during copy */
166166

167-
PG_ENSURE_ERROR_CLEANUP(cfs_control_gc_unlock, (Datum)NULL);
167+
PG_ENSURE_ERROR_CLEANUP(cfs_on_exit_callback, (Datum)NULL);
168168
{
169169
while ((xlde = ReadDir(xldir, fromdir)) != NULL)
170170
{
171171
struct stat fst;
172-
172+
173173
/* If we got a cancel signal during the copy of the directory, quit */
174174
CHECK_FOR_INTERRUPTS();
175-
175+
176176
if (strcmp(xlde->d_name, ".") == 0
177177
|| strcmp(xlde->d_name, "..") == 0
178178
|| (strlen(xlde->d_name) > 4
179179
&& strcmp(xlde->d_name + strlen(xlde->d_name) - 4, ".cfm") == 0))
180180
continue;
181-
181+
182182
snprintf(fromfile, MAXPGPATH, "%s/%s", fromdir, xlde->d_name);
183183
snprintf(tofile, MAXPGPATH, "%s/%s", todir, xlde->d_name);
184-
184+
185185
if (lstat(fromfile, &fst) < 0)
186186
ereport(ERROR,
187187
(errcode_for_file_access(),
188188
errmsg("could not stat file \"%s\": %m", fromfile)));
189-
189+
190190
if (S_ISREG(fst.st_mode))
191191
copy_zip_file(fromfile, from_compressed, tofile, to_compressed);
192192
}
193193
FreeDir(xldir);
194194
}
195-
PG_END_ENSURE_ERROR_CLEANUP(cfs_control_gc_unlock, (Datum)NULL);
195+
PG_END_ENSURE_ERROR_CLEANUP(cfs_on_exit_callback, (Datum)NULL);
196196
cfs_control_gc_unlock();
197197

198198
/*

src/backend/storage/smgr/md.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ static bool md_use_compression(RelFileNodeBackend rnode, ForkNumber forknum)
220220

221221
/* Do not compress system (catalog) relations created during bootstrap */
222222
if (forknum != MAIN_FORKNUM
223-
|| rnode.node.spcNode == DEFAULTTABLESPACE_OID
223+
|| rnode.node.spcNode == DEFAULTTABLESPACE_OID
224224
|| rnode.node.spcNode == GLOBALTABLESPACE_OID
225225
|| rnode.node.relNode < FirstNormalObjectId)
226226
return false;
@@ -249,7 +249,7 @@ static bool md_use_compression(RelFileNodeBackend rnode, ForkNumber forknum)
249249
elog(ERROR, "Failed to read compression info file %s: %m", compressionFilePath);
250250

251251
if (strcmp(algorithm, cfs_algorithm()) != 0)
252-
elog(ERROR, "Tablespace was compressed using %s algorithm, but %s is currently used",
252+
elog(ERROR, "Tablespace was compressed using %s algorithm, but %s is currently used",
253253
algorithm, cfs_algorithm());
254254

255255
fclose(compressionFile);
@@ -480,11 +480,11 @@ mdunlink(RelFileNodeBackend rnode, ForkNumber forkNum, bool isRedo)
480480
else
481481
{
482482
cfs_control_gc_lock();
483-
PG_ENSURE_ERROR_CLEANUP(cfs_control_gc_unlock, BoolGetDatum(false));
483+
PG_ENSURE_ERROR_CLEANUP(cfs_on_exit_callback, BoolGetDatum(false));
484484
{
485485
do_mdunlink(rnode, forkNum, isRedo);
486486
}
487-
PG_END_ENSURE_ERROR_CLEANUP(cfs_control_gc_unlock, BoolGetDatum(false));
487+
PG_END_ENSURE_ERROR_CLEANUP(cfs_on_exit_callback, BoolGetDatum(false));
488488
cfs_control_gc_unlock();
489489
}
490490
}

src/backend/utils/time/snapmgr.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2162,7 +2162,7 @@ void *SuspendSnapshot(void)
21622162
{
21632163
SnapshotData mvcc = {HeapTupleSatisfiesMVCC};
21642164
pairingheap fresh_regsnap = {&xmin_cmp, NULL, NULL};
2165-
SuspendedSnapshotState *s = malloc(sizeof(SuspendedSnapshotState));
2165+
SuspendedSnapshotState *s = (SuspendedSnapshotState*)MemoryContextAlloc(TopMemoryContext, sizeof(SuspendedSnapshotState));
21662166

21672167
MOVELEFT(s->CurrentSnapshotData, CurrentSnapshotData, mvcc);
21682168
MOVELEFT(s->SecondarySnapshotData, SecondarySnapshotData, mvcc);
@@ -2215,5 +2215,5 @@ void ResumeSnapshot(void *data)
22152215
ActiveSnapshot = s->ActiveSnapshot;
22162216
OldestActiveSnapshot = s->OldestActiveSnapshot;
22172217

2218-
free(s);
2218+
pfree(s);
22192219
}

src/include/storage/cfs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,13 @@ void cfs_unlock_file(FileMap* map, char const* path);
130130
uint32 cfs_alloc_page(FileMap* map, uint32 oldSize, uint32 newSize);
131131
void cfs_extend(FileMap* map, uint32 pos);
132132
void cfs_control_gc_lock(void);
133-
void cfs_control_gc_unlock(); /* argument could be given by PG_ENSURE_ERROR_CLEANUP */
133+
void cfs_control_gc_unlock(void); /* argument could be given by PG_ENSURE_ERROR_CLEANUP */
134134
int cfs_msync(FileMap* map);
135135
FileMap* cfs_mmap(int md);
136136
int cfs_munmap(FileMap* map);
137137
void cfs_initialize(void);
138138
size_t cfs_shmem_size(void);
139+
void cfs_on_exit_callback(int code, Datum arg);
139140

140141
void cfs_encrypt(const char* fname, void* block, uint32 offs, uint32 size);
141142
void cfs_decrypt(const char* fname, void* block, uint32 offs, uint32 size);

0 commit comments

Comments
 (0)