[RFC 2/2] nl80211: make eloop sockets non-blocking
Johannes Berg
johannes
Mon Oct 21 09:34:58 PDT 2013
From: Johannes Berg <johannes.berg at intel.com>
To avoid a problem where the beacon socket occasionally
blocks, mark any sockets on the eloop as non-blocking.
The previous patch reordered the code to never send a
command after a socket was put on the eloop, but now also
invalidate the nl handle pointer while it's on there.
Signed-hostap: Johannes Berg <johannes.berg at intel.com>
---
src/drivers/driver_nl80211.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index c1050e3..b59db09 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -139,16 +139,21 @@ static void nl_destroy_handles(struct nl_handle **handle)
*handle = NULL;
}
+#define ELOOP_SOCKET_INVALID 0x8888888888888889ULL
+
static void nl80211_register_eloop_read(struct nl_handle **handle,
eloop_sock_handler handler,
void *eloop_data)
{
+ nl_socket_set_nonblocking(*handle);
eloop_register_read_sock(nl_socket_get_fd(*handle), handler,
eloop_data, *handle);
+ *handle = (void *)(((unsigned long)*handle) ^ ELOOP_SOCKET_INVALID);
}
static void nl80211_destroy_eloop_handle(struct nl_handle **handle)
{
+ *handle = (void *)(((unsigned long)*handle) ^ ELOOP_SOCKET_INVALID);
eloop_unregister_read_sock(nl_socket_get_fd(*handle));
nl_destroy_handles(handle);
}
--
1.8.4.rc3
More information about the Hostap
mailing list