From e2ee13df0f48cec420af0c2ed9090cb9c07d0113 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Tue, 12 May 2020 18:21:19 +0200
Subject: [PATCH] A little of garbage collection

---
 src/database/open.c |  2 +-
 src/main/server.c   | 28 +++++++++++++++++++++++-----
 src/mkv/utils.c     |  6 +++---
 3 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/src/database/open.c b/src/database/open.c
index c1b65d44..497d71ff 100644
--- a/src/database/open.c
+++ b/src/database/open.c
@@ -48,7 +48,7 @@ __close_databases(void)
         free((void *) item->name);
         free(item);
     }
-    LOG_INFO_SCT("DB", "%s", "All db closed");
+    LOG_INFO_SCT("GARBAGE", "%s", "All db closed");
     stack_free(&db_stack);
 }
 
diff --git a/src/main/server.c b/src/main/server.c
index 3e564323..5a5d969d 100644
--- a/src/main/server.c
+++ b/src/main/server.c
@@ -35,6 +35,25 @@ REG_ADD(load_x11)
 #endif
 REG_END()
 
+char *db_path   = NULL;
+char *kara_dir  = NULL;
+char *conf_file = NULL;
+struct lkt_state srv;
+
+static void
+__garbage_collect(void)
+{
+    if (db_path)
+        free(db_path);
+    if (kara_dir)
+        free(kara_dir);
+    if (conf_file)
+        free(conf_file);
+    if (srv.win.free)
+        srv.win.free(&srv.win);
+    LOG_INFO_SCT("GARBAGE", "%s", "Cleaning a bit with global variables");
+}
+
 static void
 __sig_exit(int sig)
 {
@@ -71,11 +90,11 @@ normal_launch:
     executable_name = exe;
 
     /* Init the server */
-    struct lkt_state srv;
     int autoclear, check_exclusive = 1;
-    char *db_path  = safe_malloc(PATH_MAX * sizeof(char));
-    char *kara_dir = safe_malloc(PATH_MAX * sizeof(char));
-    char conf_file[PATH_MAX];
+    assert(!atexit(__garbage_collect));
+    db_path   = safe_malloc(PATH_MAX * sizeof(char));
+    kara_dir  = safe_malloc(PATH_MAX * sizeof(char));
+    conf_file = safe_malloc(PATH_MAX * sizeof(char));
     memset(&srv, 0, sizeof(struct lkt_state));
 
     /* Initialize the system. */
@@ -105,6 +124,5 @@ normal_launch:
     RETURN_IF(load_module_by_name(&srv, "player", &srv.win),  "Can't load module player", 3);
     RETURN_IF(load_module_by_name(&srv, "repo",   &srv.repo), "Can't load module repo", 3);
     lkt_listen(&srv);
-    srv.win.free(&srv.win);
     return EXIT_FAILURE;
 }
diff --git a/src/mkv/utils.c b/src/mkv/utils.c
index bd721a06..2e219741 100644
--- a/src/mkv/utils.c
+++ b/src/mkv/utils.c
@@ -12,7 +12,7 @@ mdtcat(struct kara_metadata *mdt, char **ret)
     size_t size = strlen(mdt->song_name) + strlen(mdt->source_name) +
                   strlen(mdt->category) + strlen(mdt->language)     +
                   strlen(mdt->author_name) + strlen(mdt->song_type) +
-                  /* Null byte */ 1 + /* Separators */ 12           +
+                  /* Null byte */ 1 + /* Separators */ 12 + 5       +
                   long_length(mdt->song_number);
     *ret = malloc(sizeof(char) * size);
     if (!*ret) {
@@ -20,7 +20,7 @@ mdtcat(struct kara_metadata *mdt, char **ret)
         return;
     }
 
-    safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s", mdt->category,
+    safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s [ %s ]", mdt->category,
                   mdt->language, mdt->source_name, mdt->song_type,
-                  mdt->song_number, mdt->song_name);
+                  mdt->song_number, mdt->song_name, mdt->author_name);
 }
-- 
GitLab