diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-08-08 22:25:45 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-08-08 22:25:45 +0000 |
commit | a11c8be973a253aad75fce6f65805beabba92bdd (patch) | |
tree | b71b21010d71a5846ef2ae6667a12df11df6e11b /src/backend/utils/init/miscinit.c | |
parent | 7d03946ffba1334c783c04fd16cf7726b32e5bee (diff) | |
download | postgresql-a11c8be973a253aad75fce6f65805beabba92bdd.tar.gz postgresql-a11c8be973a253aad75fce6f65805beabba92bdd.zip |
Back-patch fix to prevent infinite loop when $PGDATA is not writable.
Diffstat (limited to 'src/backend/utils/init/miscinit.c')
-rw-r--r-- | src/backend/utils/init/miscinit.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 33b9e11203e..956acdede4f 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.65 2001/04/16 02:42:01 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.65.2.1 2001/08/08 22:25:45 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -490,15 +490,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++) { /* @@ -511,7 +514,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); /* |