On Mon, Jul 10, 2023 at 10:53 AM Ruediger Pluem <rpl...@apache.org> wrote:
>
> On 7/10/23 10:11 AM, Joe Orton wrote:
> > On Fri, Jul 07, 2023 at 03:52:46PM -0000, yla...@apache.org wrote:
> >> Author: ylavic
> >> Date: Fri Jul  7 15:52:45 2023
> >> New Revision: 1910861
> >>
> >> URL: http://svn.apache.org/viewvc?rev=1910861&view=rev
> >> Log:
> >> ab: Fix accounting of started connections.
> >>
> >> Revert when a kept alive connection is aborted on read.
> >> Stop the polling loop when there is nothing to poll anymore, it's simpler.
> >
> > Not related to this change but I noticed that trunk ab has stopped
> > failing if trying to connect to a closed port, strace looks like:
> >
> > epoll_wait(3, [{events=EPOLLOUT|EPOLLERR|EPOLLHUP, data={u32=33073216, 
> > u64=33073216}}], 2, 30000) = 1
> > epoll_wait(3, [{events=EPOLLOUT|EPOLLERR|EPOLLHUP, data={u32=33073216, 
> > u64=33073216}}], 2, 30000) = 1
> > ...
> >
> > With HUP set in the returned events it enters the first if() at
> > https://github.com/apache/httpd/blob/trunk/support/ab.c#L2523 but
> > STATE_CONNECTING is not handled there and so it loops indefinitely.
> > That's as far as I debugged it, sorry. Any ideas?
>
> I would guess that the below fixes the loop, but I am not sure if it is the 
> correct fix.
>
> Index: support/ab.c
> ===================================================================
> --- support/ab.c        (revision 1910910)
> +++ support/ab.c        (working copy)
> @@ -2534,6 +2534,11 @@
>                  case STATE_READ:
>                      read_response(c);
>                      break;
> +                case STATE_CONNECTING:
> +                    if (rtnew & APR_POLLHUP) {
> +                        try_reconnect(c, APR_ENOPOLL);
> +                    }
> +                    break;
>                  }
>
>                  continue;

I think this is not reached with rtnevents == POLLOUT|POLLHUP because
it takes the first POLLIN|POLLHUP continue-branch.
I moved the check for POLLOUT first in r1910911, which fixed the issue for me.


Regards;
Yann.

Reply via email to