A customer is facing a problem on PostgreSQL 8.3.10 on Windows where the
syslogger process dies mysteriously every few hours under load. I
haven't yet figured out why, but when postmaster tries to respawn
syslogger, it doesn't start up but dies immediately.

The reason the relaunch fails is that in SysLoggerMain we have this:
>       /*
>        * If we restarted, our stderr is already redirected into our own input
>        * pipe.  This is of course pretty useless, not to mention that it
>        * interferes with detecting pipe EOF.  Point stderr to /dev/null. This
>        * assumes that all interesting messages generated in the syslogger will
>        * come through elog.c and will be sent to write_syslogger_file.
>        */
>       if (redirection_done)
>       {
>               int                     fd = open(NULL_DEV, O_WRONLY, 0);
> 
>               /*
>                * The closes might look redundant, but they are not: we want 
> to be
>                * darn sure the pipe gets closed even if the open failed.      
> We can
>                * survive running with stderr pointing nowhere, but we can't 
> afford
>                * to have extra pipe input descriptors hanging around.
>                */
>               close(fileno(stdout));
>               close(fileno(stderr));
>               dup2(fd, fileno(stdout));
>               dup2(fd, fileno(stderr));
>               close(fd);
>       }

NULL_DEV is defined in c.h as "/dev/null", which doesn't work on
windows. We have a port-specific #define DEVNULL which does work, we
should be using that.

Peter Eisentraut inadvertently fixed this for 8.4:

http://archives.postgresql.org/pgsql-committers/2008-12/msg00095.php

by removing NULL_DEV and using always DEVNULL, but back-branches need
that too. I'll leave NULL_DEV as it is just in case it's used by 3rd
party modules, but change the two uses of it to use DEVNULL.

-- 
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to