First, make sure we call finishPlaylist() before
closeMp3Directory() since the latter will free non-SONG_TYPE_URL
songs in playlist, which causes an invalid read when we try to
look for SONG_TYPE_URL songs to free in finishPlaylist.
Secondly, make sure our children have all exited before freeing
the playerData. If we do not, slowly-delivered signals can
trigger a race condition in the signal handlers of the decode
and player processes which rely on getPlayerData. To avoid
waitpid-ing too long (or at all), move the freePlayerData() call
farther down in main() (this won't affect anything else)
to give the OS a better chance to deliver signals and finish running
sig handlers for terminated children.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4640 09075e82-0dd4-0310-85a5-a0d7c8717e4f
* Moved all logging-related stuff into log.c
(and not myfprintf.c)
* ISO C90-compliant strftime usage:
%e and %R replaced with %d and %H:%M respectively
* Got rid of variadic macros since some old-school compilers
don't like them
* compiling with -DNDEBUG disables the DEBUG() macro
git-svn-id: https://svn.musicpd.org/mpd/trunk@4512 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This shaves another 5-6k because we've removed the paranoid
fflush() calls after every fprintf. Now we only fflush()
when we need to
git-svn-id: https://svn.musicpd.org/mpd/trunk@4493 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Add a few new options for indent to try to make
things a bit cleaner
git-svn-id: https://svn.musicpd.org/mpd/trunk@4411 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Just setupLogOutput and redirect things to the logs before
spawning the main process. We've already daemonized at this
point, so we've already proven that we can fork, but we haven't
done it yet.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4353 09075e82-0dd4-0310-85a5-a0d7c8717e4f
breaking compilation. This fixes that problem with
a macro that emulates setenv() with putenv().
git-svn-id: https://svn.musicpd.org/mpd/trunk@4097 09075e82-0dd4-0310-85a5-a0d7c8717e4f
In the words of the original author, it was 'crappy'. I tend to
agree :)
The code has also been broken for at least the past few months,
and nobody bothered fixing it
The previous format it was overly complex: 5 lines to describe
each device. The new format is one-line per-device:
audio_device_state:%d:%s
%d - 0 for disabled, any integer for enabled
%s - name of the device as specified in the config file,
whitespace and all
Incompatibilities:
* Output names are now _required_ to be unique.
This is required because the new format relies solely on the
name of the audio device.
Relying on the device IDs internal to MPD was a bad idea
anyways since the user usually has none or very little idea
how they're generated, and adding a new device or removing
one from a config would throw things off completely.
This is also just a Good Idea(TM) because it makes things
less confusing to users when they see it in their clients.
* Output states are not preserved from the previous format.
Not a big deal, since the previous code was never officially
released. Also, it's been broken for months now, so I doubt
anybody would notice :)
git-svn-id: https://svn.musicpd.org/mpd/trunk@3928 09075e82-0dd4-0310-85a5-a0d7c8717e4f
*) now --kill will not check for /proc/<pid>/exe (this is linux specific)
git-svn-id: https://svn.musicpd.org/mpd/trunk@3063 09075e82-0dd4-0310-85a5-a0d7c8717e4f
*) we now require pid_file to specified in the config
*) new prefered method for killing mpd: mpd --kill
*) cleaned up some nastiness with decode_pid handling
git-svn-id: https://svn.musicpd.org/mpd/trunk@3042 09075e82-0dd4-0310-85a5-a0d7c8717e4f
also, should have better error reporting when failing to open playlist or
music directory's, or writing the db, etc
git-svn-id: https://svn.musicpd.org/mpd/trunk@3027 09075e82-0dd4-0310-85a5-a0d7c8717e4f