67 lines
2.3 KiB
Diff
67 lines
2.3 KiB
Diff
From 7f3dbd7145d683c22e70d69ec8799a49cb837415 Mon Sep 17 00:00:00 2001
|
|
From: wuchangsheng <wuchangsheng2@huawei.com>
|
|
Date: Wed, 9 Mar 2022 17:44:50 +0800
|
|
Subject: [PATCH 11/34] fix evetns err
|
|
|
|
---
|
|
src/lstack/core/lstack_lwip.c | 36 ++++++++++++++++++++----------------
|
|
1 file changed, 20 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
|
|
index 87d99d3..3b97bb8 100644
|
|
--- a/src/lstack/core/lstack_lwip.c
|
|
+++ b/src/lstack/core/lstack_lwip.c
|
|
@@ -317,14 +317,16 @@ ssize_t write_stack_data(struct lwip_sock *sock, const void *buf, size_t len)
|
|
send_pkt++;
|
|
}
|
|
|
|
- if (NETCONN_IS_DATAOUT(sock)) {
|
|
- sock->have_event = true;
|
|
- sock->events |= EPOLLOUT;
|
|
- rte_ring_mp_enqueue(sock->weakup->event_ring, (void *)sock);
|
|
- sem_post(&sock->weakup->event_sem);
|
|
- sock->stack->stats.write_events++;
|
|
- } else {
|
|
- sock->have_event = false;
|
|
+ if ((sock->epoll_events & EPOLLOUT)) {
|
|
+ if (NETCONN_IS_DATAOUT(sock)) {
|
|
+ sock->have_event = true;
|
|
+ sock->events |= EPOLLOUT;
|
|
+ rte_ring_mp_enqueue(sock->weakup->event_ring, (void *)sock);
|
|
+ sem_post(&sock->weakup->event_sem);
|
|
+ sock->stack->stats.write_events++;
|
|
+ } else {
|
|
+ sock->have_event = false;
|
|
+ }
|
|
}
|
|
|
|
if (rte_ring_free_count(sock->stack->send_idle_ring) > USED_IDLE_WATERMARK && !sock->stack->in_replenish) {
|
|
@@ -518,14 +520,16 @@ ssize_t read_stack_data(int32_t fd, void *buf, size_t len, int32_t flags)
|
|
}
|
|
}
|
|
|
|
- if (NETCONN_IS_DATAIN(sock)) {
|
|
- sock->have_event = true;
|
|
- sock->events |= EPOLLIN;
|
|
- rte_ring_mp_enqueue(sock->weakup->event_ring, (void *)sock);
|
|
- sem_post(&sock->weakup->event_sem);
|
|
- sock->stack->stats.read_events++;
|
|
- } else {
|
|
- sock->have_event = false;
|
|
+ if ((sock->epoll_events & EPOLLIN)) {
|
|
+ if (NETCONN_IS_DATAIN(sock)) {
|
|
+ sock->have_event = true;
|
|
+ sock->events |= EPOLLIN;
|
|
+ rte_ring_mp_enqueue(sock->weakup->event_ring, (void *)sock);
|
|
+ sem_post(&sock->weakup->event_sem);
|
|
+ sock->stack->stats.read_events++;
|
|
+ } else {
|
|
+ sock->have_event = false;
|
|
+ }
|
|
}
|
|
|
|
if (recvd == 0) {
|
|
--
|
|
1.8.3.1
|
|
|