diff --git a/src/cache.c b/src/cache.c index d91aae4a..1c15dcc4 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1673,6 +1673,7 @@ cache_deinit(void) return; } - // Free event base (should free events too) + // Free event base + event_free(cache_daap_updateev); event_base_free(evbase_cache); } diff --git a/src/commands.c b/src/commands.c index b80fcad6..f0a5d042 100644 --- a/src/commands.c +++ b/src/commands.c @@ -166,6 +166,22 @@ send_command(struct commands_base *cmdbase, struct command *cmd) return 0; } +/* + * Frees the command base and closes the (internally used) pipes + */ +int +commands_base_free(struct commands_base *cmdbase) +{ + if (cmdbase->command_event) + event_free(cmdbase->command_event); + + close(cmdbase->command_pipe[0]); + close(cmdbase->command_pipe[1]); + free(cmdbase); + + return 0; +} + /* * Creates a new command base, needs to be freed by commands_base_destroy or commands_base_free. * @@ -178,12 +194,7 @@ commands_base_new(struct event_base *evbase, command_exit_cb exit_cb) struct commands_base *cmdbase; int ret; - cmdbase = calloc(1, sizeof(struct commands_base)); - if (!cmdbase) - { - DPRINTF(E_LOG, L_MAIN, "Out of memory for cmdbase\n"); - return NULL; - } + CHECK_NULL(L_MAIN, cmdbase = calloc(1, sizeof(struct commands_base))); #ifdef HAVE_PIPE2 ret = pipe2(cmdbase->command_pipe, O_CLOEXEC); @@ -201,9 +212,7 @@ commands_base_new(struct event_base *evbase, command_exit_cb exit_cb) if (!cmdbase->command_event) { DPRINTF(E_LOG, L_MAIN, "Could not create cmd event\n"); - close(cmdbase->command_pipe[0]); - close(cmdbase->command_pipe[1]); - free(cmdbase); + commands_base_free(cmdbase); return NULL; } @@ -211,9 +220,7 @@ commands_base_new(struct event_base *evbase, command_exit_cb exit_cb) if (ret != 0) { DPRINTF(E_LOG, L_MAIN, "Could not add cmd event\n"); - close(cmdbase->command_pipe[0]); - close(cmdbase->command_pipe[1]); - free(cmdbase); + commands_base_free(cmdbase); return NULL; } @@ -223,20 +230,6 @@ commands_base_new(struct event_base *evbase, command_exit_cb exit_cb) return cmdbase; } -/* - * Frees the command base and closes the (internally used) pipes - */ -int -commands_base_free(struct commands_base *cmdbase) -{ - event_free(cmdbase->command_event); - close(cmdbase->command_pipe[0]); - close(cmdbase->command_pipe[1]); - free(cmdbase); - - return 0; -} - /* * Gets the current return value for the current pending command. * diff --git a/src/httpd.c b/src/httpd.c index fbc73443..bb9d800b 100644 --- a/src/httpd.c +++ b/src/httpd.c @@ -1748,7 +1748,7 @@ httpd_init(const char *webroot) { DPRINTF(E_FATAL, L_HTTPD, "Could not create exit event\n"); - goto event_fail; + goto exitev_fail; } event_add(exitev, NULL); @@ -1757,7 +1757,7 @@ httpd_init(const char *webroot) { DPRINTF(E_FATAL, L_HTTPD, "Could not create HTTP server\n"); - goto event_fail; + goto evhttpd_fail; } v6enabled = cfg_getbool(cfg_getsec(cfg, "general"), "ipv6"); @@ -1819,7 +1819,9 @@ httpd_init(const char *webroot) thread_fail: bind_fail: evhttp_free(evhttpd); - event_fail: + evhttpd_fail: + event_free(exitev); + exitev_fail: #ifdef HAVE_EVENTFD close(exit_efd); #else @@ -1899,6 +1901,7 @@ httpd_deinit(void) close(exit_pipe[0]); close(exit_pipe[1]); #endif + event_free(exitev); evhttp_free(evhttpd); event_base_free(evbase_httpd); } diff --git a/src/httpd_streaming.c b/src/httpd_streaming.c index 9a6c00b6..dab7937e 100644 --- a/src/httpd_streaming.c +++ b/src/httpd_streaming.c @@ -686,6 +686,7 @@ streaming_deinit(void) { streaming_end(); + event_free(metaev); event_free(streamingev); streamingev = NULL; diff --git a/src/input.c b/src/input.c index 3283fc1c..c43cdcbc 100644 --- a/src/input.c +++ b/src/input.c @@ -935,6 +935,8 @@ input_init(void) thread_fail: commands_base_free(cmdbase); input_fail: + event_free(input_open_timeout_ev); + event_free(input_ev); evbuffer_free(input_buffer.evbuf); event_base_free(evbase_input); return -1; @@ -971,6 +973,8 @@ input_deinit(void) pthread_cond_destroy(&input_buffer.cond); pthread_mutex_destroy(&input_buffer.mutex); + event_free(input_open_timeout_ev); + event_free(input_ev); evbuffer_free(input_buffer.evbuf); event_base_free(evbase_input); } diff --git a/src/library.c b/src/library.c index 825919e0..ca5b9b83 100644 --- a/src/library.c +++ b/src/library.c @@ -791,5 +791,6 @@ library_deinit() sources[i]->deinit(); } + event_free(updateev); event_base_free(evbase_lib); } diff --git a/src/main.c b/src/main.c index 03972eae..e7a1f51c 100644 --- a/src/main.c +++ b/src/main.c @@ -919,6 +919,8 @@ main(int argc, char **argv) DPRINTF(E_LOG, L_MAIN, "Stopping gracefully\n"); ret = EXIT_SUCCESS; + event_free(sig_event); + /* * On a clean shutdown, bring mDNS down first to give a chance * to the clients to perform a clean shutdown on their end @@ -971,6 +973,8 @@ main(int argc, char **argv) } mdns_fail: + event_base_free(evbase_main); + daemon_fail: if (background) { diff --git a/src/outputs.c b/src/outputs.c index 1fa99109..7cefba3a 100644 --- a/src/outputs.c +++ b/src/outputs.c @@ -1043,7 +1043,7 @@ outputs_deinit(void) { int i; - evtimer_del(outputs_deferredev); + event_free(outputs_deferredev); for (i = 0; outputs[i]; i++) { diff --git a/src/player.c b/src/player.c index aba00318..463212e0 100644 --- a/src/player.c +++ b/src/player.c @@ -3327,6 +3327,7 @@ player_init(void) outputs_deinit(); error_evbase_free: commands_base_free(cmdbase); + event_free(pb_timer_ev); event_base_free(evbase_player); #ifdef HAVE_TIMERFD close(pb_timer_fd); @@ -3369,5 +3370,6 @@ player_deinit(void) free(history); + event_free(pb_timer_ev); event_base_free(evbase_player); } diff --git a/src/remote_pairing.c b/src/remote_pairing.c index 79456d4e..b0e53029 100644 --- a/src/remote_pairing.c +++ b/src/remote_pairing.c @@ -861,6 +861,8 @@ remote_pairing_deinit(void) if (remote_info) free_remote(remote_info); + event_free(pairingev); + #ifdef HAVE_EVENTFD close(pairing_efd); #else diff --git a/src/spotify.c b/src/spotify.c index ffe94bff..9e842972 100644 --- a/src/spotify.c +++ b/src/spotify.c @@ -1582,6 +1582,7 @@ spotify_init(void) session_fail: cmd_fail: + event_free(g_notifyev); evnew_fail: commands_base_free(cmdbase); event_base_free(evbase_spotify); @@ -1625,7 +1626,8 @@ spotify_deinit(void) /* Release session */ fptr_sp_session_release(g_sess); - /* Free event base (should free events too) */ + /* Free event base */ + event_free(g_notifyev); event_base_free(evbase_spotify); /* Close pipes */