diff --git a/src/advertising.c b/src/advertising.c
index ab5c6fc..d56b7a2 100644
--- a/src/advertising.c
+++ b/src/advertising.c
uint16_t mgmt_index;
uint8_t max_adv_len;
uint8_t max_ads;
- unsigned int next_instance_id;
+ unsigned int instance_bitmap;
};
#define AD_TYPE_BROADCAST 0
queue_remove(ad->manager->ads, ad);
+ util_clear_uid(&ad->manager->instance_bitmap, ad->instance);
+
g_idle_add(advertisement_free_idle_cb, ad);
}
DBusMessageIter args;
struct advertisement *ad;
struct dbus_obj_match match;
+ uint8_t instance;
DBG("RegisterAdvertisement");
if (queue_find(manager->ads, match_advertisement, &match))
return btd_error_already_exists(msg);
- if (queue_length(manager->ads) >= manager->max_ads)
+ instance = util_get_uid(&manager->instance_bitmap, manager->max_ads);
+ if (!instance)
return btd_error_failed(msg, "Maximum advertisements reached");
dbus_message_iter_next(&args);
DBG("Registered advertisement at path %s", match.path);
- ad->instance = manager->next_instance_id++;
+ ad->instance = instance;
ad->manager = manager;
queue_push_tail(manager->ads, ad);
manager->ads = queue_new();
- manager->next_instance_id = 1;
-
return manager;
}