From: Bruce Momjian Date: Tue, 28 Dec 2010 04:11:33 +0000 (-0500) Subject: Fix code to properly pull out shared memory key now that the X-Git-Tag: REL9_1_ALPHA3~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bada44a2a2ac6f33bd355c9acc0dfaa3d4890e54;p=postgresql 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. --- diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index deb2d582b2..f04ae80f10 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))); } }