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

Commitf02259f

Browse files
committed
Allow concurrent-safe open() and fopen() in frontend code for Windows
PostgreSQL uses a custom wrapper for open() and fopen() which isconcurrent-safe, allowing multiple processes to open and work on thesame file. This has a couple of advantages:- pg_test_fsync does not handle O_DSYNC correctly otherwise, leading tofalse claims that disks are unsafe.- TAP tests can run into race conditions when a postmaster and pg_ctlopen postmaster.pid, fixing some random failures in the buildfam.pg_upgrade is one frontend tool using workarounds to bypass file lockingissues with the log files it generates, however the interactions withpg_ctl are proving to be tedious to get rid of, so this is left forlater.Author: Laurenz AlbeReviewed-by: Michael Paquier, Kuntal GhoshDiscussion:https://postgr.es/m/1527846213.2475.31.camel@cybertec.atDiscussion:https://postgr.es/m/16922.1520722108@sss.pgh.pa.us
1 parentbcbd159 commitf02259f

File tree

5 files changed

+12
-7
lines changed

5 files changed

+12
-7
lines changed

‎src/bin/initdb/initdb.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,15 @@ readfile(const char *path)
490490
char*buffer;
491491
intc;
492492

493+
#ifdefWIN32
494+
/*
495+
* On Windows, we have to open the file in text mode so that carriage
496+
* returns are stripped.
497+
*/
498+
if ((infile=fopen(path,"rt"))==NULL)
499+
#else
493500
if ((infile=fopen(path,"r"))==NULL)
501+
#endif
494502
{
495503
fprintf(stderr,_("%s: could not open file \"%s\" for reading: %s\n"),
496504
progname,path,strerror(errno));

‎src/bin/pg_basebackup/pg_receivewal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ FindStreamingStart(uint32 *tli)
287287

288288
snprintf(fullpath,sizeof(fullpath),"%s/%s",basedir,dirent->d_name);
289289

290-
fd=open(fullpath,O_RDONLY |PG_BINARY);
290+
fd=open(fullpath,O_RDONLY |PG_BINARY,0);
291291
if (fd<0)
292292
{
293293
fprintf(stderr,_("%s: could not open compressed file \"%s\": %s\n"),

‎src/bin/pg_verify_checksums/pg_verify_checksums.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ scan_file(const char *fn, BlockNumber segmentno)
8080
intf;
8181
BlockNumberblockno;
8282

83-
f=open(fn,O_RDONLY |PG_BINARY);
83+
f=open(fn,O_RDONLY |PG_BINARY,0);
8484
if (f<0)
8585
{
8686
fprintf(stderr,_("%s: could not open file \"%s\": %s\n"),

‎src/common/file_utils.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ pre_sync_fname(const char *fname, bool isdir, const char *progname)
222222
{
223223
intfd;
224224

225-
fd=open(fname,O_RDONLY |PG_BINARY);
225+
fd=open(fname,O_RDONLY |PG_BINARY,0);
226226

227227
if (fd<0)
228228
{
@@ -283,7 +283,7 @@ fsync_fname(const char *fname, bool isdir, const char *progname)
283283
* unsupported operations, e.g. opening a directory under Windows), and
284284
* logging others.
285285
*/
286-
fd=open(fname,flags);
286+
fd=open(fname,flags,0);
287287
if (fd<0)
288288
{
289289
if (errno==EACCES|| (isdir&&errno==EISDIR))

‎src/include/port.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,8 @@ extern bool rmtree(const char *path, bool rmtopdir);
249249
#defineO_DIRECT0x80000000
250250
externintpgwin32_open(constchar*,int,...);
251251
externFILE*pgwin32_fopen(constchar*,constchar*);
252-
253-
#ifndefFRONTEND
254252
#defineopen(a,b,c) pgwin32_open(a,b,c)
255253
#definefopen(a,b) pgwin32_fopen(a,b)
256-
#endif
257254

258255
/*
259256
* Mingw-w64 headers #define popen and pclose to _popen and _pclose. We want

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp