From bada44a2a2ac6f33bd355c9acc0dfaa3d4890e54 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 27 Dec 2010 23:11:33 -0500 Subject: [PATCH] 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. --- src/backend/utils/init/miscinit.c | 39 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 17 deletions(-) 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))); } } -- 2.40.0