summaryrefslogtreecommitdiff
path: root/src/analysis/db/server.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-05-02 10:03:07 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-05-02 10:03:07 (GMT)
commitd419908c21172b72e7782f460f385b33ad85f929 (patch)
tree5e8f71350f5b0b82e5c4162aeefa2d308e0e234f /src/analysis/db/server.c
parentce43a13de1760603af2848bd51ab6bac3c794c10 (diff)
Cleaned some archive resources at exit.
Diffstat (limited to 'src/analysis/db/server.c')
-rw-r--r--src/analysis/db/server.c46
1 files changed, 44 insertions, 2 deletions
diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c
index 0debd83..f6c7a71 100644
--- a/src/analysis/db/server.c
+++ b/src/analysis/db/server.c
@@ -107,6 +107,9 @@ static void g_db_server_class_init(GDbServerClass *);
/* Initialise une description de fichier binaire. */
static void g_db_server_init(GDbServer *);
+/* Supprime toutes les références externes. */
+static void g_db_server_dispose(GDbServer *);
+
/* Procède à la libération totale de la mémoire. */
static void g_db_server_finalize(GDbServer *);
@@ -149,6 +152,7 @@ static void g_db_server_class_init(GDbServerClass *klass)
object = G_OBJECT_CLASS(klass);
+ object->dispose = (GObjectFinalizeFunc/* ! */)g_db_server_dispose;
object->finalize = (GObjectFinalizeFunc)g_db_server_finalize;
}
@@ -179,6 +183,37 @@ static void g_db_server_init(GDbServer *server)
/******************************************************************************
* *
+* Paramètres : archive = instance d'objet GLib à traiter. *
+* *
+* Description : Supprime toutes les références externes. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_db_server_dispose(GDbServer *server)
+{
+ GList *iter; /* Boucle de parcours */
+
+ for (iter = g_list_first(server->archives);
+ iter != NULL;
+ iter = g_list_first(server->archives))
+ {
+ g_object_unref(G_OBJECT(iter->data));
+ server->archives = g_list_delete_link(server->archives, iter);
+ }
+
+ g_mutex_clear(&server->mutex);
+
+ G_OBJECT_CLASS(g_db_server_parent_class)->dispose(G_OBJECT(server));
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : server = instance d'objet GLib à traiter. *
* *
* Description : Procède à la libération totale de la mémoire. *
@@ -740,7 +775,7 @@ static void *g_db_server_listener(GDbServer *server)
if (!status) goto gdsl_out_error;
/**
- * L'ajout dans la liste des clients connectés provoque un envoie de mises à jour.
+ * L'ajout dans la liste des clients connectés provoque un envoi de mises à jour.
* L'éventuelle erreur survenant pendant l'envoi ne peut donc pas être remontée
* lors des échanges initiaux, car ces derniers seraient alors précédés des mises à jour...
*/
@@ -749,7 +784,10 @@ static void *g_db_server_listener(GDbServer *server)
{
assert(error == DBE_NONE);
- server->archives = g_list_append(server->archives, archive);
+ /* Si l'archive a été créée pour l'occasion... */
+ if (iter == NULL)
+ server->archives = g_list_append(server->archives, archive);
+
error = g_cdb_archive_add_client(archive, fd, &user);
exit_packed_buffer(&out_pbuf);
@@ -769,6 +807,10 @@ static void *g_db_server_listener(GDbServer *server)
exit_packed_buffer(&out_pbuf);
+ /* Si l'archive a été créée pour l'occasion... */
+ if (iter == NULL && archive != NULL)
+ g_object_unref(G_OBJECT(archive));
+
gdsl_error:
free(peer_name);