diff --git a/gisi/client.c b/gisi/client.c index d1fad2ea..e536d4e3 100644 --- a/gisi/client.c +++ b/gisi/client.c @@ -127,13 +127,25 @@ static void foreach_destroy(gpointer value, gpointer user) g_isi_pending_remove(op); } -void g_isi_client_destroy(GIsiClient *client) +void g_isi_client_reset(GIsiClient *client) { if (client == NULL) return; + if (!client->pending) + return; + g_slist_foreach(client->pending, foreach_destroy, client); g_slist_free(client->pending); + client->pending = NULL; +}; + +void g_isi_client_destroy(GIsiClient *client) +{ + if (!client) + return; + + g_isi_client_reset(client); g_free(client); } diff --git a/gisi/client.h b/gisi/client.h index 51acf0aa..ea140ed1 100644 --- a/gisi/client.h +++ b/gisi/client.h @@ -37,6 +37,7 @@ typedef struct _GIsiClient GIsiClient; GIsiClient *g_isi_client_create(GIsiModem *modem, uint8_t resource); GIsiModem *g_isi_client_modem(GIsiClient *client); uint8_t g_isi_client_resource(GIsiClient *client); +void g_isi_client_reset(GIsiClient *client); void g_isi_client_destroy(GIsiClient *client); GIsiPending *g_isi_client_send(GIsiClient *client, const void *__restrict msg,