summaryrefslogtreecommitdiffstats
path: root/gisi
diff options
context:
space:
mode:
authorAki Niemi <aki.niemi@nokia.com>2010-11-23 16:08:11 +0200
committerAki Niemi <aki.niemi@nokia.com>2010-12-22 17:13:47 +0200
commit188bbc5d3bfd2abc2c1036a49f308b0174b25605 (patch)
tree83b61ced10f3173c93ca12fa2e0bdef7cb481ef1 /gisi
parentedd0b327e0479c5f3ce48f3d2b25fdc8abb379ea (diff)
downloadofono-188bbc5d3bfd2abc2c1036a49f308b0174b25605.tar.bz2
gisi: Add client API to reset instance
Calling this method will cancel any pending requests, and unsubscribe from any pending subscriptions.
Diffstat (limited to 'gisi')
-rw-r--r--gisi/client.c14
-rw-r--r--gisi/client.h1
2 files changed, 14 insertions, 1 deletions
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,