Skip to content
Snippets Groups Projects
  • Tom Lane's avatar
    e82d9e62
    Adjust elog.c so that elog(FATAL) exits (including cases where ERROR is · e82d9e62
    Tom Lane authored
    promoted to FATAL) end in exit(1) not exit(0).  Then change the postmaster to
    allow exit(1) without a system-wide panic, but not for the startup subprocess
    or the bgwriter.  There were a couple of places that were using exit(1) to
    deliberately force a system-wide panic; adjust these to be exit(2) instead.
    This fixes the problem noted back in July that if the startup process exits
    with elog(ERROR), the postmaster would think everything is hunky-dory and
    proceed to start up.  Alternative solutions such as trying to run the entire
    startup process as a critical section seem less clean, primarily because of
    the fact that a fair amount of startup code is shared by all postmaster
    children in the EXEC_BACKEND case.  We'd need an ugly special case somewhere
    near the head of main.c to make it work if it's the child process's
    responsibility to determine what happens; and what's the point when the
    postmaster already treats different children differently?
    e82d9e62
    History
    Adjust elog.c so that elog(FATAL) exits (including cases where ERROR is
    Tom Lane authored
    promoted to FATAL) end in exit(1) not exit(0).  Then change the postmaster to
    allow exit(1) without a system-wide panic, but not for the startup subprocess
    or the bgwriter.  There were a couple of places that were using exit(1) to
    deliberately force a system-wide panic; adjust these to be exit(2) instead.
    This fixes the problem noted back in July that if the startup process exits
    with elog(ERROR), the postmaster would think everything is hunky-dory and
    proceed to start up.  Alternative solutions such as trying to run the entire
    startup process as a critical section seem less clean, primarily because of
    the fact that a fair amount of startup code is shared by all postmaster
    children in the EXEC_BACKEND case.  We'd need an ugly special case somewhere
    near the head of main.c to make it work if it's the child process's
    responsibility to determine what happens; and what's the point when the
    postmaster already treats different children differently?