]> granicus.if.org Git - postgresql/commitdiff
Fix code to properly pull out shared memory key now that the
authorBruce Momjian <bruce@momjian.us>
Tue, 28 Dec 2010 04:11:33 +0000 (23:11 -0500)
committerBruce Momjian <bruce@momjian.us>
Tue, 28 Dec 2010 04:11:33 +0000 (23:11 -0500)
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

index deb2d582b2a09974015bbf488a6a2c2841a38edb..f04ae80f10d180bbe25c54151beeb04502b95618 100644 (file)
@@ -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)));
                        }
                }