From be6f37ba05e19ae9dab4e3414c5e6d8ae502ccf5 Mon Sep 17 00:00:00 2001 From: Christoph Lipka Date: Tue, 27 Oct 2015 16:55:13 +0900 Subject: Fix daemon shutdown The shutdown of the daemon was not proper implemented. This commit fixes: - memory leaks - removal of created sockets Signed-off-by: Christoph Lipka --- src/daemon/dlt-daemon.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) (limited to 'src/daemon/dlt-daemon.c') diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c index 02e42ec..79be6ba 100644 --- a/src/daemon/dlt-daemon.c +++ b/src/daemon/dlt-daemon.c @@ -659,13 +659,7 @@ int main(int argc, char* argv[]) dlt_daemon_log_internal(&daemon, &daemon_local, "Exiting Daemon...", daemon_local.flags.vflag); - /* disconnect all logstorage devices */ - dlt_daemon_logstorage_cleanup(&daemon, - &daemon_local, - daemon_local.flags.vflag); - - -// dlt_daemon_local_cleanup(&daemon, &daemon_local, daemon_local.flags.vflag); + dlt_daemon_local_cleanup(&daemon, &daemon_local, daemon_local.flags.vflag); dlt_log(LOG_NOTICE, "Leaving DLT daemon\n"); @@ -1131,6 +1125,14 @@ void dlt_daemon_local_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, i dlt_receiver_free(&(daemon_local->receiverSock)); /* Ignore result */ + dlt_receiver_free(&(daemon_local->receiverCtrlSock)); + /* Ignore result */ + if (daemon_local->flags.yvalue[0]) + { + /* Ignore result */ + dlt_receiver_free(&(daemon_local->receiverSerial)); + } + /* Ignore result */ dlt_message_free(&(daemon_local->msg),daemon_local->flags.vflag); close(daemon_local->fp); @@ -1144,6 +1146,9 @@ void dlt_daemon_local_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, i } /* if */ #endif + /* free ringbuffer */ + dlt_buffer_free_dynamic(&(daemon->client_ringbuffer)); + /* Ignore result */ dlt_file_free(&(daemon_local->file),daemon_local->flags.vflag); @@ -1158,6 +1163,24 @@ void dlt_daemon_local_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, i /* Try to delete lock file, ignore result of unlink() */ unlink(DLT_DAEMON_LOCK_FILE); + if (daemon_local->flags.offlineLogstorageMaxDevices > 0) + { + /* disconnect all logstorage devices */ + dlt_daemon_logstorage_cleanup(daemon, + daemon_local, + daemon_local->flags.vflag); + + free(daemon->storage_handle); + } + + if (daemon->ECUVersionString != NULL) + { + free(daemon->ECUVersionString); + } + + dlt_daemon_unix_socket_close(daemon_local->ctrlsock); + unlink(daemon_local->flags.ctrlSockPath); + dlt_event_handler_cleanup_connections(&daemon_local->pEvent); } -- cgit v1.2.1