Hello,

I did some quick checking and it does indeed solve my problem. Do you want me 
to give a review/ack on the github PR? I do have an account there with id 
"thebolt" (but it is not yet linked to my current employers email from which I 
am writing this)


I do however still have some epoll problems, also related to this change, and 
now it is together with unix local (stream) socket.


The setup is as follows, I have to tasks, taskA and taskB.


taskA does setup a new local socket, does listen (blocking) followed by accept 
(blocking) followed by "simple" poll+write/read

taskB does socket(), make nonblock, connect() and then adds the socket fd to an 
epoll fd with EPOLLIN only.


epoll_ctl(..EPOLL_CTL_ADD..) does poll setup, which in this case is 
local_pollsetup (in local_netpoll.c). The connection is in state 
LOCAL_STATE_CONNECTING (taskA didn't run accept yet) so the poll is setup as an 
"event poll".


When taskA calls "accept" it eventually will perform a poll_notify(... 
EPOLLOUT), but ask taskB only specified EPOLLIN it will be ignored, the epoll 
not waken up, revents still set to 0 and the fd stays on the setup-list inside 
the epoll, meaning it will never do another poll setup on it, even though the 
socket itself changed state internally so that the next call to local_pollsetup 
would setup the polling differently.



In principle I wonder if you don't have to move from "setup" to "teardown" list 
(so that the fd is re-setup the next epoll_wait) not only on successful 
poll_notify but on _any_ poll_notify independent of if (filtered) revents is 
changed or not. Otherwise internal state changes in the underlying 
driver/module will never be detected and pollsetup not re-ran when needed.


Regards

Marten Svanfeldt

________________________________
From: 汪博文 <wangbow...@xiaomi.com>
Sent: Tuesday, September 19, 2023 12:11:27 PM
To: Mårten Svanfeldt
Cc: dev@nuttx.apache.org
Subject: RE: epoll oddities following setup/teardown optimizations

Hi,

I has a fix fs_epoll: add critical section for teardown process and reset the 
eph… by CV-Bowen · Pull Request #10706 · apache/nuttx 
(github.com)<https://github.com/apache/nuttx/pull/10706> about this problem.
But I couldn’t find your GitHub ID, so I’m notifying you through email. Could 
you try this PR and check if this PR resolves your problem ?

Regards
Wang Bowen
#/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件!
 This e-mail and its attachments contain confidential information from XIAOMI, 
which is intended only for the person or entity whose address is listed above. 
Any use of the information contained herein in any way (including, but not 
limited to, total or partial disclosure, reproduction, or dissemination) by 
persons other than the intended recipient(s) is prohibited. If you receive this 
e-mail in error, please notify the sender by phone or email immediately and 
delete it!******/#

Reply via email to