Projects
Eulaceura:Mainline
lwip
_service:obs_scm:0077-adpat-event-for-rtc-mode....
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm:0077-adpat-event-for-rtc-mode.patch of Package lwip
From e719fde7f90a1dff8daeb23170febb5ff38903c9 Mon Sep 17 00:00:00 2001 From: jiangheng <jiangheng14@huawei.com> Date: Fri, 27 Oct 2023 19:19:42 +0800 Subject: [PATCH 77/77] adpat event for rtc mode --- src/api/api_msg.c | 8 ++------ src/api/sockets.c | 33 ++++++++++++++++++++++++++++++--- src/include/eventpoll.h | 4 ++++ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/api/api_msg.c b/src/api/api_msg.c index 9a8992a..5e09505 100644 --- a/src/api/api_msg.c +++ b/src/api/api_msg.c @@ -293,11 +293,9 @@ recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p, #endif /* LWIP_SO_RCVBUF */ #if GAZELLE_UDP_ENABLE do_lwip_add_recvlist(conn->socket); - LWIP_UNUSED_ARG(len); -#else /* GAZELLE_UDP_ENABLE */ +#endif /* GAZELLE_UDP_ENABLE */ /* Register event with callback */ API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); -#endif /* GAZELLE_UDP_ENABLE */ } } #endif /* LWIP_UDP */ @@ -357,11 +355,9 @@ recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) #endif /* LWIP_SO_RCVBUF */ #if GAZELLE_ENABLE do_lwip_add_recvlist(conn->socket); - LWIP_UNUSED_ARG(len); -#else +#endif /* Register event with callback */ API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); -#endif } return ERR_OK; diff --git a/src/api/sockets.c b/src/api/sockets.c index 1d71427..d62290d 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -2744,29 +2744,56 @@ event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len) check_waiters = 0; } #if GAZELLE_ENABLE - if (conn->acceptmbox != NULL && !sys_mbox_empty(conn->acceptmbox)) { - add_sock_event(sock, POLLIN); + if (netif_is_rtc_mode(netif_default)) { + if (sock->rcvevent == 1) { + add_sock_event_nolock(sock, POLLIN); + } + } else { + if (conn->acceptmbox != NULL && !sys_mbox_empty(conn->acceptmbox)) { + add_sock_event(sock, POLLIN); + } } #endif break; case NETCONN_EVT_RCVMINUS: sock->rcvevent--; check_waiters = 0; +#if GAZELLE_ENABLE + if (netif_is_rtc_mode(netif_default)) { + if (sock->rcvevent == 0) { + del_sock_event_nolock(sock, POLLIN); + } + } +#endif break; case NETCONN_EVT_SENDPLUS: if (sock->sendevent) { check_waiters = 0; } sock->sendevent = 1; +#if GAZELLE_ENABLE + if (netif_is_rtc_mode(netif_default)) { + add_sock_event_nolock(sock, POLLOUT); + } +#endif break; case NETCONN_EVT_SENDMINUS: sock->sendevent = 0; check_waiters = 0; +#if GAZELLE_ENABLE + if (netif_is_rtc_mode(netif_default)) { + del_sock_event_nolock(sock, POLLOUT); + } +#endif break; case NETCONN_EVT_ERROR: sock->errevent = 1; #if GAZELLE_ENABLE - add_sock_event(sock, EPOLLERR); + if (netif_is_rtc_mode(netif_default)) { + add_sock_event_nolock(sock, EPOLLERR); + } else { + add_sock_event(sock, EPOLLERR); + } #endif break; default: diff --git a/src/include/eventpoll.h b/src/include/eventpoll.h index dd65a4d..5bc5206 100644 --- a/src/include/eventpoll.h +++ b/src/include/eventpoll.h @@ -66,6 +66,10 @@ struct libos_epoll { struct lwip_sock; extern void add_sock_event(struct lwip_sock *sock, uint32_t event); +extern void add_sock_event_nolock(struct lwip_sock *sock, uint32_t event); +extern void del_sock_event(struct lwip_sock *sock, uint32_t event); +extern void del_sock_event_nolock(struct lwip_sock *sock, uint32_t event); + extern int32_t lstack_epoll_close(int32_t); #endif /* __EVENTPOLL_H__ */ -- 2.27.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2