[PATCH 1/2] server: Only remove non-listening fd from poll

Zebediah Figura (she/her) zfigura at codeweavers.com
Mon Jul 5 14:41:32 CDT 2021


On 7/2/21 4:59 PM, Torge Matthies wrote:
> On 7/2/21 9:33 PM, Zebediah Figura (she/her) wrote:
>> On 7/2/21 1:06 PM, David Koolhoven wrote:
>>> This makes sure we poll listening non-connection
>>> file descriptors even if the event is POLLERR or POLLHUP.
>>>
>>> Signed-off-by: David Koolhoven <david at koolhoven-home.net>
>>> ---
>>>    server/sock.c | 2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/server/sock.c b/server/sock.c
>>> index befa9117c13..ce2f390ec05 100644
>>> --- a/server/sock.c
>>> +++ b/server/sock.c
>>> @@ -1024,7 +1024,7 @@ static void sock_poll_event( struct fd *fd, int
>>> event )
>>>            fprintf(stderr, "socket %p select event: %x\n", sock, event);
>>>        /* we may change event later, remove from loop here */
>>> -    if (event & (POLLERR|POLLHUP)) set_fd_events( sock->fd, -1 );
>>> +    if (event & (POLLERR|POLLHUP) && sock->state != SOCK_LISTENING)
>>> set_fd_events( sock->fd, -1 );
>>>        switch (sock->state)
>>>        {
>>>
>>
>> This doesn't look right. Why do we need to do this?
>>
> 
> I only added this because there was no code path with sock->state ==
> SOCK_LISTENING that didn't already lead to a set_fd_events call, which
> overrides this one, so calling it here is useless. It doesn't fix
> anything and might add more code complexity than optimizing away one
> epoll_ctl call is worth.
> 

Personally I'm inclined to say that this code could use less code 
complexity rather than more (and I doubt the optimization makes a 
difference anyway.)



More information about the wine-devel mailing list