Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1cfdb1c

Browse files
committed
Fix memory leak in BufFileCreateShared().
Also this commit unifies some duplicated code in makeBufFile() andBufFileOpenShared() into new function makeBufFileCommon().Author: Antonin HouskaReviewed-By: Thomas Munro, Tatsuo IshiiDiscussion:https://postgr.es/m/16139.1529049566%40localhost
1 parentff03112 commit1cfdb1c

File tree

1 file changed

+22
-31
lines changed

1 file changed

+22
-31
lines changed

‎src/backend/storage/file/buffile.c

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -99,35 +99,46 @@ struct BufFile
9999
charbuffer[BLCKSZ];
100100
};
101101

102+
staticBufFile*makeBufFileCommon(intnfiles);
102103
staticBufFile*makeBufFile(Filefirstfile);
103104
staticvoidextendBufFile(BufFile*file);
104105
staticvoidBufFileLoadBuffer(BufFile*file);
105106
staticvoidBufFileDumpBuffer(BufFile*file);
106107
staticintBufFileFlush(BufFile*file);
107108
staticFileMakeNewSharedSegment(BufFile*file,intsegment);
108109

109-
110110
/*
111-
* Create a BufFile given the first underlying physical file.
112-
* NOTE: caller must set isInterXact if appropriate.
111+
* Create BufFile and perform the common initialization.
113112
*/
114113
staticBufFile*
115-
makeBufFile(Filefirstfile)
114+
makeBufFileCommon(intnfiles)
116115
{
117116
BufFile*file= (BufFile*)palloc(sizeof(BufFile));
118117

119-
file->numFiles=1;
120-
file->files= (File*)palloc(sizeof(File));
121-
file->files[0]=firstfile;
122-
file->offsets= (off_t*)palloc(sizeof(off_t));
123-
file->offsets[0]=0L;
118+
file->numFiles=nfiles;
119+
file->offsets= (off_t*)palloc0(sizeof(off_t)*nfiles);
124120
file->isInterXact= false;
125121
file->dirty= false;
126122
file->resowner=CurrentResourceOwner;
127123
file->curFile=0;
128124
file->curOffset=0L;
129125
file->pos=0;
130126
file->nbytes=0;
127+
128+
returnfile;
129+
}
130+
131+
/*
132+
* Create a BufFile given the first underlying physical file.
133+
* NOTE: caller must set isInterXact if appropriate.
134+
*/
135+
staticBufFile*
136+
makeBufFile(Filefirstfile)
137+
{
138+
BufFile*file=makeBufFileCommon(1);
139+
140+
file->files= (File*)palloc(sizeof(File));
141+
file->files[0]=firstfile;
131142
file->readOnly= false;
132143
file->fileset=NULL;
133144
file->name=NULL;
@@ -246,23 +257,12 @@ BufFileCreateShared(SharedFileSet *fileset, const char *name)
246257
{
247258
BufFile*file;
248259

249-
file=(BufFile*)palloc(sizeof(BufFile));
260+
file=makeBufFileCommon(1);
250261
file->fileset=fileset;
251262
file->name=pstrdup(name);
252-
file->numFiles=1;
253263
file->files= (File*)palloc(sizeof(File));
254264
file->files[0]=MakeNewSharedSegment(file,0);
255-
file->offsets= (off_t*)palloc(sizeof(off_t));
256-
file->offsets[0]=0L;
257-
file->isInterXact= false;
258-
file->dirty= false;
259-
file->resowner=CurrentResourceOwner;
260-
file->curFile=0;
261-
file->curOffset=0L;
262-
file->pos=0;
263-
file->nbytes=0;
264265
file->readOnly= false;
265-
file->name=pstrdup(name);
266266

267267
returnfile;
268268
}
@@ -283,7 +283,6 @@ BufFileOpenShared(SharedFileSet *fileset, const char *name)
283283
File*files;
284284
intnfiles=0;
285285

286-
file= (BufFile*)palloc(sizeof(BufFile));
287286
files=palloc(sizeof(File)*capacity);
288287

289288
/*
@@ -317,16 +316,8 @@ BufFileOpenShared(SharedFileSet *fileset, const char *name)
317316
(errcode_for_file_access(),
318317
errmsg("could not open BufFile \"%s\"",name)));
319318

320-
file->numFiles=nfiles;
319+
file=makeBufFileCommon(nfiles);
321320
file->files=files;
322-
file->offsets= (off_t*)palloc0(sizeof(off_t)*nfiles);
323-
file->isInterXact= false;
324-
file->dirty= false;
325-
file->resowner=CurrentResourceOwner;/* Unused, can't extend */
326-
file->curFile=0;
327-
file->curOffset=0L;
328-
file->pos=0;
329-
file->nbytes=0;
330321
file->readOnly= true;/* Can't write to files opened this way */
331322
file->fileset=fileset;
332323
file->name=pstrdup(name);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp