From 02abd34ad29301fdd3ade31fe35c62033e732007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=AD=90=E6=80=A1?= Date: Tue, 15 Oct 2024 07:47:13 +0000 Subject: [PATCH 1/3] update fs/vfs/epoll/fs_epoll.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 石子怡 --- fs/vfs/epoll/fs_epoll.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/fs/vfs/epoll/fs_epoll.c b/fs/vfs/epoll/fs_epoll.c index fdda62e1..bdd9d7b8 100644 --- a/fs/vfs/epoll/fs_epoll.c +++ b/fs/vfs/epoll/fs_epoll.c @@ -220,14 +220,18 @@ int epoll_close(int epfd) { struct epoll_head *epHead = NULL; + (VOID)pthread_mutex_lock(&g_epollMutex); epHead = EpollGetDataBuff(epfd); if (epHead == NULL) { + (VOID)pthread_mutex_unlock(&g_epollMutex); set_errno(EBADF); return -1; } DoEpollClose(epHead); - return EpollFreeSysFd(epfd); + int ret = EpollFreeSysFd(epfd); + (VOID)pthread_mutex_unlock(&g_epollMutex); + return ret; } int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) @@ -236,15 +240,16 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) int i; int ret = -1; + (VOID)pthread_mutex_lock(&g_epollMutex); epHead = EpollGetDataBuff(epfd); if (epHead == NULL) { set_errno(EBADF); - return ret; + goto OUT_RELEASE; } if (ev == NULL) { set_errno(EINVAL); - return -1; + goto OUT_RELEASE; } switch (op) { @@ -252,18 +257,19 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) ret = CheckFdExist(epHead, fd); if (ret == -1) { set_errno(EEXIST); - return -1; + goto OUT_RELEASE; } if (epHead->nodeCount == EPOLL_DEFAULT_SIZE) { set_errno(ENOMEM); - return -1; + goto OUT_RELEASE; } epHead->evs[epHead->nodeCount].events = ev->events | POLLERR | POLLHUP; epHead->evs[epHead->nodeCount].data.fd = fd; epHead->nodeCount++; - return 0; + ret = 0; + break; case EPOLL_CTL_DEL: for (i = 0; i < epHead->nodeCount; i++) { if (epHead->evs[i].data.fd != fd) { @@ -275,23 +281,29 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) epHead->nodeCount - i); } epHead->nodeCount--; - return 0; + ret = 0; + goto OUT_RELEASE; } set_errno(ENOENT); - return -1; + break; case EPOLL_CTL_MOD: for (i = 0; i < epHead->nodeCount; i++) { if (epHead->evs[i].data.fd == fd) { epHead->evs[i].events = ev->events | POLLERR | POLLHUP; - return 0; + ret = 0; + goto OUT_RELEASE; } } set_errno(ENOENT); - return -1; + break; default: set_errno(EINVAL); - return -1; + break; } + +OUT_RELEASE: + (VOID)pthread_mutex_unlock(&g_epollMutex); + return ret; } int epoll_wait(int epfd, FAR struct epoll_event *evs, int maxevents, int timeout) From 63f261d2399339ec829a490b73cbf92964094bf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=AD=90=E6=80=A1?= Date: Tue, 15 Oct 2024 07:53:37 +0000 Subject: [PATCH 2/3] update fs/vfs/epoll/fs_epoll.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 石子怡 --- fs/vfs/epoll/fs_epoll.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/vfs/epoll/fs_epoll.c b/fs/vfs/epoll/fs_epoll.c index bdd9d7b8..abb96e5a 100644 --- a/fs/vfs/epoll/fs_epoll.c +++ b/fs/vfs/epoll/fs_epoll.c @@ -240,7 +240,7 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) int i; int ret = -1; - (VOID)pthread_mutex_lock(&g_epollMutex); + (VOID)pthread_mutex_lock(&g_epollMutex); epHead = EpollGetDataBuff(epfd); if (epHead == NULL) { set_errno(EBADF); @@ -301,7 +301,7 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) break; } -OUT_RELEASE: + OUT_RELEASE: (VOID)pthread_mutex_unlock(&g_epollMutex); return ret; } From c099376d697eb3787d2c9583027fd5fc63bb0b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=AD=90=E6=80=A1?= Date: Tue, 15 Oct 2024 08:15:43 +0000 Subject: [PATCH 3/3] update fs/vfs/epoll/fs_epoll.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 石子怡 --- fs/vfs/epoll/fs_epoll.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/vfs/epoll/fs_epoll.c b/fs/vfs/epoll/fs_epoll.c index abb96e5a..bdd9d7b8 100644 --- a/fs/vfs/epoll/fs_epoll.c +++ b/fs/vfs/epoll/fs_epoll.c @@ -240,7 +240,7 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) int i; int ret = -1; - (VOID)pthread_mutex_lock(&g_epollMutex); + (VOID)pthread_mutex_lock(&g_epollMutex); epHead = EpollGetDataBuff(epfd); if (epHead == NULL) { set_errno(EBADF); @@ -301,7 +301,7 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev) break; } - OUT_RELEASE: +OUT_RELEASE: (VOID)pthread_mutex_unlock(&g_epollMutex); return ret; }