| Commit message (Collapse) | Author | Files | Lines |
|
Don't mention the program name in the error message.
|
|
When the update thread is started before MPD has forked (for
daemonization), it is killed, because threads do not survive a fork().
This induces an inconsistent state where MPD won't start any update
thread at all, because it thinks the thread is already running.
|
|
Reimplemented the legacy mixer configuration: copy the deprecated
configuration values into the audio_output section. Don't configure
the mixers twice (once for the audio_output, and a second time for the
legacy values).
This requires volume_init() to be called before initAudioDriver().
|
|
All config_get_block_*() functions should accept constant config_param
pointers.
|
|
Don't declare and export variables specific to stored playlists in
playlist.c/playlist.h.
|
|
Start the decoder thread when the player thread starts. The decoder
thread is already stopped by the player thread.
|
|
"Stickers" are pieces of information attached to existing MPD objects
(e.g. song files, directories, albums). Clients can create arbitrary
name/value pairs. MPD itself does not assume any special meaning in
them.
|
|
This way, we don't have to pass the full "Options" object to
daemonize().
|
|
The constructor/destructor functions parse and free the configuration
properly. This way, we don't have to load the pid file path more than
once.
|
|
The state_file library should manage its own regular saves.
|
|
The constructor/destructor interface should hide the functions
read_state_file() and write_state_file().
|
|
config_get_path() is an simpler interface than parseConfigFilePath().
|
|
Fetch the configuration variables buffered_chunks and
buffered_before_play just when they are needed.
|
|
Moved changeToUser(), cleanUpPidFile(), killFromPidFile() to
daemon.c. These are daemonization functions.
|
|
Without a music_directory, MPD is an excellent streaming client.
|
|
Don't include conf.h in database.c.
|
|
time(NULL) shows the wrong results when the machine's clock is
changed.
|
|
Renamed functions and types.
|
|
Renamed functions, types, variables.
|
|
|
|
|
|
|
|
AC_CHECK_HEADERS defines HAVE_LOCALE_H, so we don't have to manually
define HAVE_LOCALE.
|
|
Make db_load(), db_save() and db_check() return bool instead of int.
|
|
For updating the database, directory_update_init() should be called
explicitly.
|
|
Start the daemon after --create-db. This makes --create-db a flag
which discards the old database and starts with a fresh one.
|
|
|
|
|
|
There is only one location using PIPE_EVENT_SIGNAL: to synchronize
player_command() with player_command_finished(). Use the "notify"
library instead of the event_pipe here.
|
|
Make the event_pipe (formerly main_notify) send/receive a set of
events, with a callback for each one.
The default event PIPE_EVENT_SIGNAL does not have a callback. It
is still there for waking up the main thread, when it is waiting for
the player thread.
|
|
Continuing the previous patch.
|
|
We are going to migrate away from the concept of notifying the main
thread. There should be events sent to it instead. This patch starts
a series to implement that.
|
|
|
|
With the GLib main loop, the client manager can install its own event
in case a client is expired. No need for main.c to call
client_manager_expire() manually.
|
|
Other libraries may need to access the main_loop reference, to add or
remove events, or to call g_main_loop_quit().
|
|
This is a rather huge patch, which unfortunately cannot be splitted.
Instead of using our custom ioops.h library, convert everything to use
the GLib main loop.
|
|
redirect_stdin() is a daemonization function, and disconnecting from
the standard input is always a good idea for MPD.
|
|
|
|
Disable changeToUser(), daemonize(), killFromPidFile().
|
|
Removed the fallback setenv() implementation for solaris.
|
|
|
|
Only include headers which are really needed. os_compat.h aimed to
make MPD easily portable, but was never actually made portable.
|
|
|
|
|
|
|
|
|
|
The logging library currently has 3 constructor functions: initLog(),
open_log_files(), setup_log_output(), called in this order. Merged
the first two.
|
|
|
|
When there are no archive plugins, we do not need the archive API at
all. Drop all its overhead.
|
|
|