aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2010-12-27 23:11:33 -0500
committerBruce Momjian <bruce@momjian.us>2010-12-27 23:11:33 -0500
commitbada44a2a2ac6f33bd355c9acc0dfaa3d4890e54 (patch)
treee9f49d6151bfe86e0c0375f959b5824637a149d2
parentc0577c92a84cc477a88fe6868c16c4a7e3348b11 (diff)
downloadpostgresql-bada44a2a2ac6f33bd355c9acc0dfaa3d4890e54.tar.gz
postgresql-bada44a2a2ac6f33bd355c9acc0dfaa3d4890e54.zip
Fix code to properly pull out shared memory key now that the
postmaster.pid file is larger than in previous major versions. This is a bug introduced when I added lines to the file recently.
-rw-r--r--src/backend/utils/init/miscinit.c39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index deb2d582b2a..f04ae80f10d 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -825,29 +825,34 @@ CreateLockFile(const char *filename, bool amPostmaster,
*/
if (isDDLock)
{
- char *ptr;
+ char *ptr = NULL;
unsigned long id1,
id2;
+ int lineno;
- ptr = strchr(buffer, '\n');
- if (ptr != NULL &&
- (ptr = strchr(ptr + 1, '\n')) != NULL)
+ for (lineno = 1; lineno <= 4; lineno++)
{
- ptr++;
- if (sscanf(ptr, "%lu %lu", &id1, &id2) == 2)
+ if ((ptr = strchr(ptr, '\n')) == NULL)
{
- if (PGSharedMemoryIsInUse(id1, id2))
- ereport(FATAL,
- (errcode(ERRCODE_LOCK_FILE_EXISTS),
- errmsg("pre-existing shared memory block "
- "(key %lu, ID %lu) is still in use",
- id1, id2),
- errhint("If you're sure there are no old "
- "server processes still running, remove "
- "the shared memory block "
- "or just delete the file \"%s\".",
- filename)));
+ elog(LOG, "bogus data in \"%s\"", DIRECTORY_LOCK_FILE);
+ break;
}
+ ptr++;
+ }
+
+ if (ptr && sscanf(ptr, "%lu %lu", &id1, &id2) == 2)
+ {
+ if (PGSharedMemoryIsInUse(id1, id2))
+ ereport(FATAL,
+ (errcode(ERRCODE_LOCK_FILE_EXISTS),
+ errmsg("pre-existing shared memory block "
+ "(key %lu, ID %lu) is still in use",
+ id1, id2),
+ errhint("If you're sure there are no old "
+ "server processes still running, remove "
+ "the shared memory block "
+ "or just delete the file \"%s\".",
+ filename)));
}
}