diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-05-02 10:03:07 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-05-02 10:03:07 (GMT) |
commit | d419908c21172b72e7782f460f385b33ad85f929 (patch) | |
tree | 5e8f71350f5b0b82e5c4162aeefa2d308e0e234f /src/analysis/db/server.c | |
parent | ce43a13de1760603af2848bd51ab6bac3c794c10 (diff) |
Cleaned some archive resources at exit.
Diffstat (limited to 'src/analysis/db/server.c')
-rw-r--r-- | src/analysis/db/server.c | 46 |
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); |