From 308b3f2337f100b5d27fa2af50bf929caff4a7d4 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 24 Sep 2009 21:40:04 +0200 Subject: listen: handle fatal errors with GError Don't call g_error(), which will abort the process and dump core. --- src/listen.c | 23 +++++++++++++++-------- src/listen.h | 7 ++++++- src/main.c | 9 ++++++++- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/listen.c b/src/listen.c index 98108d9da..4728e7c7a 100644 --- a/src/listen.c +++ b/src/listen.c @@ -347,7 +347,8 @@ listen_add_config_param(unsigned int port, } } -void listen_global_init(void) +bool +listen_global_init(GError **error_r) { int port = config_get_positive(CONF_PORT, DEFAULT_PORT); const struct config_param *param = @@ -361,10 +362,12 @@ void listen_global_init(void) do { success = listen_add_config_param(port, param, &error); - if (!success) - g_error("Failed to listen on %s (line %i): %s", - param->value, param->line, - error->message); + if (!success) { + g_propagate_prefixed_error(error_r, error, + "Failed to listen on %s (line %i): ", + param->value, param->line); + return false; + } param = config_get_next_param(CONF_BIND_TO_ADDRESS, param); @@ -374,12 +377,16 @@ void listen_global_init(void) configured port on all interfaces */ success = listen_add_port(port, &error); - if (!success) - g_error("Failed to listen on *:%d: %s", - port, error->message); + if (!success) { + g_propagate_prefixed_error(error_r, error, + "Failed to listen on *:%d: ", + port); + return false; + } } listen_port = port; + return true; } void listen_global_finish(void) diff --git a/src/listen.h b/src/listen.h index 63253fc53..9f55edb88 100644 --- a/src/listen.h +++ b/src/listen.h @@ -20,9 +20,14 @@ #ifndef MPD_LISTEN_H #define MPD_LISTEN_H +#include + +#include + extern int listen_port; -void listen_global_init(void); +bool +listen_global_init(GError **error_r); void listen_global_finish(void); diff --git a/src/main.c b/src/main.c index 775ae9a72..0d7cbf1ed 100644 --- a/src/main.c +++ b/src/main.c @@ -273,6 +273,8 @@ int main(int argc, char *argv[]) struct options options; clock_t start; bool create_db; + GError *error = NULL; + bool success; daemonize_close_stdin(); @@ -301,7 +303,12 @@ int main(int argc, char *argv[]) tag_lib_init(); log_init(options.verbose, options.log_stderr); - listen_global_init(); + success = listen_global_init(&error); + if (!success) { + g_warning("%s", error->message); + g_error_free(error); + return EXIT_FAILURE; + } daemonize_set_user(); -- cgit v1.2.3