netdev: Make invoking disconnect_cb reentrant safe

This commit is contained in:
Denis Kenzior 2016-09-22 16:20:33 -05:00
parent 886ffc2edb
commit 9a63ab6712
1 changed files with 13 additions and 6 deletions

View File

@ -512,20 +512,27 @@ static void netdev_cmd_deauthenticate_cb(struct l_genl_msg *msg,
void *user_data)
{
struct netdev *netdev = user_data;
void *disconnect_data;
netdev_disconnect_cb_t disconnect_cb;
bool r;
if (!netdev->disconnect_cb)
goto done;
if (!netdev->disconnect_cb) {
netdev->user_data = NULL;
return;
}
disconnect_data = netdev->user_data;
disconnect_cb = netdev->disconnect_cb;
netdev->user_data = NULL;
netdev->disconnect_cb = NULL;
if (l_genl_msg_get_error(msg) < 0)
r = false;
else
r = true;
netdev->disconnect_cb(netdev, r, netdev->user_data);
netdev->disconnect_cb = NULL;
done:
netdev->user_data = NULL;
disconnect_cb(netdev, r, disconnect_data);
}
static struct l_genl_msg *netdev_build_cmd_deauthenticate(struct netdev *netdev,