On Darwin, refuse postmaster startup when multithreaded.
authorNoah Misch <[email protected]>
Thu, 8 Jan 2015 03:46:59 +0000 (22:46 -0500)
committerNoah Misch <[email protected]>
Thu, 8 Jan 2015 03:46:59 +0000 (22:46 -0500)
The previous commit introduced its report at LOG level to avoid
surprises at minor release upgrade time.  Compel users deploying the
next major release to also deploy the reported workaround.

src/backend/postmaster/postmaster.c

index f33c4fed8157c5230326223a9a435b37ada8aed5..e2b3b8114da30e7aec0694fbee5018f6a9c34ccd 100644 (file)
@@ -1216,7 +1216,7 @@ PostmasterMain(int argc, char *argv[])
     * normal case on Windows, which offers neither fork() nor sigprocmask().
     */
    if (pthread_is_threaded_np() != 0)
-       ereport(LOG,
+       ereport(FATAL,
                (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
                 errmsg("postmaster became multithreaded during startup"),
         errhint("Set the LC_ALL environment variable to a valid locale.")));
@@ -4781,11 +4781,14 @@ ExitPostmaster(int status)
    /*
     * There is no known cause for a postmaster to become multithreaded after
     * startup.  Recheck to account for the possibility of unknown causes.
+    * This message uses LOG level, because an unclean shutdown at this point
+    * would usually not look much different from a clean shutdown.
     */
    if (pthread_is_threaded_np() != 0)
        ereport(LOG,
-               (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-                errmsg("postmaster became multithreaded")));
+               (errcode(ERRCODE_INTERNAL_ERROR),
+                errmsg_internal("postmaster became multithreaded"),
+          errdetail("Please report this to <[email protected]>.")));
 #endif
 
    /* should cleanup shared memory and kill all backends */