aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/init/miscinit.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-07-03 16:49:48 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-07-03 16:49:48 +0000
commitc8fe66dfb22239ef177d64c45d932f2c432be6bb (patch)
treeda38638cce6733ae0a4dd11f14621fbd89c90cb6 /src/backend/utils/init/miscinit.c
parent86bc2d91c3811cfb9ff5899a98804e21815a89e0 (diff)
downloadpostgresql-c8fe66dfb22239ef177d64c45d932f2c432be6bb.tar.gz
postgresql-c8fe66dfb22239ef177d64c45d932f2c432be6bb.zip
Don't go into infinite loop if /home/postgres/testversion/data directory is not writable.
Diffstat (limited to 'src/backend/utils/init/miscinit.c')
-rw-r--r--src/backend/utils/init/miscinit.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 4f2b940b7ea..44e6f768152 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.72 2001/06/20 18:07:56 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.73 2001/07/03 16:49:48 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -539,15 +539,18 @@ CreateLockFile(const char *filename, bool amPostmaster,
{
int fd;
char buffer[MAXPGPATH + 100];
+ int ntries;
int len;
int encoded_pid;
pid_t other_pid;
pid_t my_pid = getpid();
/*
- * We need a loop here because of race conditions.
+ * We need a loop here because of race conditions. But don't loop
+ * forever (for example, a non-writable $PGDATA directory might cause
+ * a failure that won't go away). 100 tries seems like plenty.
*/
- for (;;)
+ for (ntries = 0; ; ntries++)
{
/*
@@ -560,7 +563,7 @@ CreateLockFile(const char *filename, bool amPostmaster,
/*
* Couldn't create the pid file. Probably it already exists.
*/
- if (errno != EEXIST && errno != EACCES)
+ if ((errno != EEXIST && errno != EACCES) || ntries > 100)
elog(FATAL, "Can't create lock file %s: %m", filename);
/*