mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 16:50:55 +08:00
poll: pollsetup should notify only one fd passd by caller
since it's redundant to iterate the whole fds array in setup Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
committed by
Alin Jerpelea
parent
11b3adf17f
commit
eddd90de78
@@ -52,9 +52,9 @@ static int can_setup(FAR struct socket *psock);
|
||||
static sockcaps_t can_sockcaps(FAR struct socket *psock);
|
||||
static void can_addref(FAR struct socket *psock);
|
||||
static int can_bind(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
static int can_poll_local(FAR struct socket *psock, FAR struct pollfd *fds,
|
||||
bool setup);
|
||||
bool setup);
|
||||
static int can_close(FAR struct socket *psock);
|
||||
|
||||
/****************************************************************************
|
||||
@@ -394,9 +394,9 @@ static int can_poll_local(FAR struct socket *psock, FAR struct pollfd *fds,
|
||||
* during callback processing.
|
||||
*/
|
||||
|
||||
cb->flags = NETDEV_DOWN;
|
||||
cb->priv = (FAR void *)info;
|
||||
cb->event = can_poll_eventhandler;
|
||||
cb->flags = NETDEV_DOWN;
|
||||
cb->priv = info;
|
||||
cb->event = can_poll_eventhandler;
|
||||
|
||||
if ((fds->events & POLLOUT) != 0)
|
||||
{
|
||||
@@ -412,7 +412,7 @@ static int can_poll_local(FAR struct socket *psock, FAR struct pollfd *fds,
|
||||
* for use during poll teardown as well.
|
||||
*/
|
||||
|
||||
fds->priv = (FAR void *)info;
|
||||
fds->priv = info;
|
||||
|
||||
/* Check for read data availability now */
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ int icmp_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
*/
|
||||
|
||||
cb->flags = NETDEV_DOWN;
|
||||
cb->priv = (FAR void *)info;
|
||||
cb->priv = info;
|
||||
cb->event = icmp_poll_eventhandler;
|
||||
|
||||
if ((fds->events & POLLIN) != 0)
|
||||
@@ -202,7 +202,7 @@ int icmp_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
* for use during poll teardown as well.
|
||||
*/
|
||||
|
||||
fds->priv = (FAR void *)info;
|
||||
fds->priv = info;
|
||||
|
||||
/* Check for read data availability now */
|
||||
|
||||
|
||||
@@ -50,13 +50,15 @@ static int icmp_setup(FAR struct socket *psock);
|
||||
static sockcaps_t icmp_sockcaps(FAR struct socket *psock);
|
||||
static void icmp_addref(FAR struct socket *psock);
|
||||
static int icmp_netpoll(FAR struct socket *psock,
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
static int icmp_close(FAR struct socket *psock);
|
||||
#ifdef CONFIG_NET_SOCKOPTS
|
||||
static int icmp_getsockopt(FAR struct socket *psock, int level,
|
||||
int option, FAR void *value, FAR socklen_t *value_len);
|
||||
int option, FAR void *value,
|
||||
FAR socklen_t *value_len);
|
||||
static int icmp_setsockopt(FAR struct socket *psock, int level,
|
||||
int option, FAR const void *value, socklen_t value_len);
|
||||
int option, FAR const void *value,
|
||||
socklen_t value_len);
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
@@ -189,7 +189,7 @@ int icmpv6_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
*/
|
||||
|
||||
cb->flags = NETDEV_DOWN;
|
||||
cb->priv = (FAR void *)info;
|
||||
cb->priv = info;
|
||||
cb->event = icmpv6_poll_eventhandler;
|
||||
|
||||
if ((fds->events & POLLIN) != 0)
|
||||
@@ -201,7 +201,7 @@ int icmpv6_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
* for use during poll teardown as well.
|
||||
*/
|
||||
|
||||
fds->priv = (FAR void *)info;
|
||||
fds->priv = info;
|
||||
|
||||
/* Check for read data availability now */
|
||||
|
||||
|
||||
+25
-17
@@ -66,42 +66,50 @@ static int inet_setup(FAR struct socket *psock);
|
||||
static sockcaps_t inet_sockcaps(FAR struct socket *psock);
|
||||
static void inet_addref(FAR struct socket *psock);
|
||||
static int inet_bind(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr,
|
||||
socklen_t addrlen);
|
||||
static int inet_getsockname(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int inet_getpeername(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int inet_listen(FAR struct socket *psock, int backlog);
|
||||
static int inet_connect(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr,
|
||||
socklen_t addrlen);
|
||||
static int inet_accept(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen,
|
||||
FAR struct socket *newsock, int flags);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen,
|
||||
FAR struct socket *newsock, int flags);
|
||||
static int inet_poll(FAR struct socket *psock,
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
static ssize_t inet_send(FAR struct socket *psock, FAR const void *buf,
|
||||
size_t len, int flags);
|
||||
size_t len, int flags);
|
||||
static ssize_t inet_sendto(FAR struct socket *psock, FAR const void *buf,
|
||||
size_t len, int flags, FAR const struct sockaddr *to,
|
||||
socklen_t tolen);
|
||||
size_t len, int flags,
|
||||
FAR const struct sockaddr *to,
|
||||
socklen_t tolen);
|
||||
static ssize_t inet_sendmsg(FAR struct socket *psock,
|
||||
FAR struct msghdr *msg, int flags);
|
||||
FAR struct msghdr *msg, int flags);
|
||||
static ssize_t inet_recvmsg(FAR struct socket *psock,
|
||||
FAR struct msghdr *msg, int flags);
|
||||
FAR struct msghdr *msg, int flags);
|
||||
static int inet_ioctl(FAR struct socket *psock,
|
||||
int cmd, unsigned long arg);
|
||||
int cmd, unsigned long arg);
|
||||
static int inet_socketpair(FAR struct socket *psocks[2]);
|
||||
static int inet_shutdown(FAR struct socket *psock, int how);
|
||||
#ifdef CONFIG_NET_SOCKOPTS
|
||||
static int inet_getsockopt(FAR struct socket *psock, int level,
|
||||
int option, FAR void *value, FAR socklen_t *value_len);
|
||||
int option, FAR void *value,
|
||||
FAR socklen_t *value_len);
|
||||
static int inet_setsockopt(FAR struct socket *psock, int level,
|
||||
int option, FAR const void *value, socklen_t value_len);
|
||||
int option, FAR const void *value,
|
||||
socklen_t value_len);
|
||||
#endif
|
||||
#ifdef CONFIG_NET_SENDFILE
|
||||
static ssize_t inet_sendfile(FAR struct socket *psock,
|
||||
FAR struct file *infile, FAR off_t *offset,
|
||||
size_t count);
|
||||
FAR struct file *infile, FAR off_t *offset,
|
||||
size_t count);
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
@@ -87,7 +87,7 @@ static int local_event_pollsetup(FAR struct local_conn_s *conn,
|
||||
eventset |= POLLIN;
|
||||
}
|
||||
|
||||
local_event_pollnotify(conn, eventset);
|
||||
poll_notify(&fds, 1, eventset);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -51,25 +51,31 @@ static int local_setup(FAR struct socket *psock);
|
||||
static sockcaps_t local_sockcaps(FAR struct socket *psock);
|
||||
static void local_sockaddref(FAR struct socket *psock);
|
||||
static int local_bind(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr,
|
||||
socklen_t addrlen);
|
||||
static int local_getsockname(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int local_getpeername(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int local_connect(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr,
|
||||
socklen_t addrlen);
|
||||
static int local_poll(FAR struct socket *psock,
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
static int local_close(FAR struct socket *psock);
|
||||
static int local_ioctl(FAR struct socket *psock,
|
||||
int cmd, unsigned long arg);
|
||||
int cmd, unsigned long arg);
|
||||
static int local_socketpair(FAR struct socket *psocks[2]);
|
||||
static int local_shutdown(FAR struct socket *psock, int how);
|
||||
#ifdef CONFIG_NET_SOCKOPTS
|
||||
static int local_getsockopt(FAR struct socket *psock, int level,
|
||||
int option, FAR void *value, FAR socklen_t *value_len);
|
||||
int option, FAR void *value,
|
||||
FAR socklen_t *value_len);
|
||||
static int local_setsockopt(FAR struct socket *psock, int level,
|
||||
int option, FAR const void *value, socklen_t value_len);
|
||||
int option, FAR const void *value,
|
||||
socklen_t value_len);
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
@@ -51,15 +51,18 @@ static int netlink_setup(FAR struct socket *psock);
|
||||
static sockcaps_t netlink_sockcaps(FAR struct socket *psock);
|
||||
static void netlink_addref(FAR struct socket *psock);
|
||||
static int netlink_bind(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
static int netlink_getsockname(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int netlink_getpeername(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int netlink_connect(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr,
|
||||
socklen_t addrlen);
|
||||
static int netlink_poll(FAR struct socket *psock, FAR struct pollfd *fds,
|
||||
bool setup);
|
||||
bool setup);
|
||||
static ssize_t netlink_sendmsg(FAR struct socket *psock,
|
||||
FAR struct msghdr *msg, int flags);
|
||||
static ssize_t netlink_recvmsg(FAR struct socket *psock,
|
||||
|
||||
+18
-12
@@ -141,30 +141,36 @@ static int rpmsg_socket_setup(FAR struct socket *psock);
|
||||
static sockcaps_t rpmsg_socket_sockcaps(FAR struct socket *psock);
|
||||
static void rpmsg_socket_addref(FAR struct socket *psock);
|
||||
static int rpmsg_socket_bind(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr,
|
||||
socklen_t addrlen);
|
||||
static int rpmsg_socket_getsockname(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int rpmsg_socket_getconnname(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen);
|
||||
static int rpmsg_socket_listen(FAR struct socket *psock, int backlog);
|
||||
static int rpmsg_socket_connect(FAR struct socket *psock,
|
||||
FAR const struct sockaddr *addr, socklen_t addrlen);
|
||||
FAR const struct sockaddr *addr,
|
||||
socklen_t addrlen);
|
||||
static int rpmsg_socket_accept(FAR struct socket *psock,
|
||||
FAR struct sockaddr *addr, FAR socklen_t *addrlen,
|
||||
FAR struct socket *newsock, int flags);
|
||||
FAR struct sockaddr *addr,
|
||||
FAR socklen_t *addrlen,
|
||||
FAR struct socket *newsock, int flags);
|
||||
static int rpmsg_socket_poll(FAR struct socket *psock,
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
FAR struct pollfd *fds, bool setup);
|
||||
static ssize_t rpmsg_socket_sendmsg(FAR struct socket *psock,
|
||||
FAR struct msghdr *msg, int flags);
|
||||
FAR struct msghdr *msg, int flags);
|
||||
static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
|
||||
FAR struct msghdr *msg, int flags);
|
||||
FAR struct msghdr *msg, int flags);
|
||||
static int rpmsg_socket_close(FAR struct socket *psock);
|
||||
static int rpmsg_socket_ioctl(FAR struct socket *psock,
|
||||
int cmd, unsigned long arg);
|
||||
#ifdef CONFIG_NET_SOCKOPTS
|
||||
static int rpmsg_socket_getsockopt(FAR struct socket *psock,
|
||||
int level, int option, FAR void *value,
|
||||
FAR socklen_t *value_len);
|
||||
int level, int option,
|
||||
FAR void *value,
|
||||
FAR socklen_t *value_len);
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
@@ -943,7 +949,7 @@ static int rpmsg_socket_poll(FAR struct socket *psock,
|
||||
}
|
||||
}
|
||||
|
||||
rpmsg_socket_poll_notify(conn, eventset);
|
||||
poll_notify(&fds, 1, eventset);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+9
-10
@@ -165,9 +165,9 @@ static uint16_t tcp_poll_eventhandler(FAR struct net_driver_s *dev,
|
||||
{
|
||||
/* Stop further callbacks */
|
||||
|
||||
info->cb->flags = 0;
|
||||
info->cb->priv = NULL;
|
||||
info->cb->event = NULL;
|
||||
info->cb->flags = 0;
|
||||
info->cb->priv = NULL;
|
||||
info->cb->event = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -256,17 +256,16 @@ int tcp_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
* callback processing.
|
||||
*/
|
||||
|
||||
cb->flags = TCP_DISCONN_EVENTS;
|
||||
cb->priv = (FAR void *)info;
|
||||
cb->event = tcp_poll_eventhandler;
|
||||
cb->flags = TCP_DISCONN_EVENTS;
|
||||
cb->priv = info;
|
||||
cb->event = tcp_poll_eventhandler;
|
||||
|
||||
if ((fds->events & POLLOUT) != 0)
|
||||
{
|
||||
cb->flags |= TCP_POLL
|
||||
cb->flags |= TCP_POLL;
|
||||
#if defined(CONFIG_NET_TCP_WRITE_BUFFERS)
|
||||
| TCP_ACKDATA
|
||||
cb->flags |= TCP_ACKDATA;
|
||||
#endif
|
||||
;
|
||||
|
||||
/* Monitor the connected event */
|
||||
|
||||
@@ -285,7 +284,7 @@ int tcp_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
* for use during poll teardown as well.
|
||||
*/
|
||||
|
||||
fds->priv = (FAR void *)info;
|
||||
fds->priv = info;
|
||||
|
||||
/* Check for read data or backlogged connection availability now */
|
||||
|
||||
|
||||
@@ -186,9 +186,9 @@ int udp_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
* callback processing.
|
||||
*/
|
||||
|
||||
cb->flags = NETDEV_DOWN;
|
||||
cb->priv = (FAR void *)info;
|
||||
cb->event = udp_poll_eventhandler;
|
||||
cb->flags = NETDEV_DOWN;
|
||||
cb->priv = info;
|
||||
cb->event = udp_poll_eventhandler;
|
||||
|
||||
if ((fds->events & POLLOUT) != 0)
|
||||
{
|
||||
@@ -204,7 +204,7 @@ int udp_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds)
|
||||
* for use during poll teardown as well.
|
||||
*/
|
||||
|
||||
fds->priv = (FAR void *)info;
|
||||
fds->priv = info;
|
||||
|
||||
/* Check for read data availability now */
|
||||
|
||||
|
||||
@@ -174,17 +174,17 @@ static int usrsock_pollsetup(FAR struct socket *psock,
|
||||
* callback processing.
|
||||
*/
|
||||
|
||||
cb->flags = USRSOCK_EVENT_ABORT | USRSOCK_EVENT_CONNECT_READY |
|
||||
USRSOCK_EVENT_SENDTO_READY | USRSOCK_EVENT_RECVFROM_AVAIL |
|
||||
USRSOCK_EVENT_REMOTE_CLOSED;
|
||||
cb->priv = (FAR void *)info;
|
||||
cb->event = poll_event;
|
||||
cb->flags = USRSOCK_EVENT_ABORT | USRSOCK_EVENT_CONNECT_READY |
|
||||
USRSOCK_EVENT_SENDTO_READY | USRSOCK_EVENT_RECVFROM_AVAIL |
|
||||
USRSOCK_EVENT_REMOTE_CLOSED;
|
||||
cb->priv = info;
|
||||
cb->event = poll_event;
|
||||
|
||||
/* Save the reference in the poll info structure as fds private as well
|
||||
* for use during poll teardown as well.
|
||||
*/
|
||||
|
||||
fds->priv = (FAR void *)info;
|
||||
fds->priv = info;
|
||||
|
||||
/* Check if socket is in error state */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user