android: Cancel all pending confirm name before stop discovery

If user wants to cancel discovery we should remove all the confirm name
requests from mgmt queues.

It is in order to make sure that stop discovery have a free way to
reach kernel.

This improves scenario when there is a big inflow of device found events and
mgmt queues become full of confirm name requests. In such case stop discovery
might stack in the queue.
This commit is contained in:
Lukasz Rymanowski 2014-03-10 00:06:36 +01:00 committed by Szymon Janc
parent 08228cf45a
commit a5ee41a24f

View File

@ -2470,6 +2470,14 @@ static bool start_discovery(void)
return false;
}
static void cancel_pending_confirm_name(gpointer data, gpointer user_data)
{
struct device *dev = data;
mgmt_cancel(mgmt_if, dev->confirm_id);
dev->confirm_id = 0;
}
static bool stop_discovery(void)
{
struct mgmt_cp_stop_discovery cp;
@ -2484,6 +2492,9 @@ static bool stop_discovery(void)
DBG("type=0x%x", cp.type);
/* Lets drop all confirm name request as we don't need it anymore */
g_slist_foreach(cached_devices, cancel_pending_confirm_name, NULL);
if (mgmt_send(mgmt_if, MGMT_OP_STOP_DISCOVERY, adapter.index,
sizeof(cp), &cp, NULL, NULL, NULL) > 0)
return true;