• Eric Wong's avatar
    Fix endless loop when mpd is launched from a non-interactive shell. · bbe8b0ef
    Eric Wong authored
    Thanks to _noth_ for the patch, this fixes Mantis bug #1534
    
    _noth_ wrote:
    > When MPD is launched from a non-interactive shell, it enters an endless
    > loop, filling up its error log file with "error accept()'ing" messages.
    > This is caused by the fact that stdin is already closed when mpd starts
    > up.  listenOnPort() opens up the first of its sockets as fd 0 (the first
    > empty fd table position). Then, setup_log_output()->redirect_stdin()
    > overwrites fd0 (fd=open("/dev/null",...); dup2(fd, STDIN_FILENO);)
    > without checking if it corresponds to the actual standard input (or if
    > it is open in the first place).  This means that listenSockets[0].fd now
    > is a fd for /dev/null, thus doIOForInterfaces()->getConnections() can't
    > accept(2) on it and fails with the above error. The attached patch fixes
    > this for me.
    
    git-svn-id: https://svn.musicpd.org/mpd/trunk@6843 09075e82-0dd4-0310-85a5-a0d7c8717e4f
    bbe8b0ef
log.c 5.95 KB