OSDN Git Service

Minor cleanup in attrib server channel disconnect
authorClaudio Takahasi <claudio.takahasi@openbossa.org>
Tue, 4 Oct 2011 17:52:23 +0000 (14:52 -0300)
committerJohan Hedberg <johan.hedberg@intel.com>
Wed, 5 Oct 2011 08:16:24 +0000 (11:16 +0300)
src/attrib-server.c

index 5a50ade..95efd9f 100644 (file)
@@ -783,12 +783,8 @@ static void attrib_free(void *data)
        g_free(a);
 }
 
-static void channel_disconnect(void *user_data)
+static void channel_free(struct gatt_channel *channel)
 {
-       struct gatt_channel *channel = user_data;
-
-       clients = g_slist_remove(clients, channel);
-
        g_slist_free(channel->notify);
        g_slist_free(channel->indicate);
        g_slist_free_full(channel->configs, attrib_free);
@@ -797,6 +793,14 @@ static void channel_disconnect(void *user_data)
        g_free(channel);
 }
 
+static void channel_disconnect(void *user_data)
+{
+       struct gatt_channel *channel = user_data;
+
+       clients = g_slist_remove(clients, channel);
+       channel_free(channel);
+}
+
 static void channel_handler(const uint8_t *ipdu, uint16_t len,
                                                        gpointer user_data)
 {
@@ -1173,8 +1177,6 @@ failed:
 
 void attrib_server_exit(void)
 {
-       GSList *l;
-
        g_slist_free_full(database, attrib_free);
 
        if (l2cap_io) {
@@ -1187,18 +1189,7 @@ void attrib_server_exit(void)
                g_io_channel_shutdown(le_io, FALSE, NULL);
        }
 
-       for (l = clients; l; l = l->next) {
-               struct gatt_channel *channel = l->data;
-
-               g_slist_free(channel->notify);
-               g_slist_free(channel->indicate);
-               g_slist_free_full(channel->configs, attrib_free);
-
-               g_attrib_unref(channel->attrib);
-               g_free(channel);
-       }
-
-       g_slist_free(clients);
+       g_slist_free_full(clients, (GDestroyNotify) channel_free);
 
        if (gatt_sdp_handle)
                remove_record_from_server(gatt_sdp_handle);