Re: svn commit: r1879438 - /httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r1879438 - /httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c

Ruediger Pluem


On 7/2/20 2:22 PM, [hidden email] wrote:

> Author: ylavic
> Date: Thu Jul  2 12:22:07 2020
> New Revision: 1879438
>
> URL: http://svn.apache.org/viewvc?rev=1879438&view=rev
> Log:
> mod_proxy_wstunnel: follow up to r1879418: handle first async lifetime too.
>
> Create the dedicated pfds and subpool in proxy_wstunnel_request() too, for
> the first call to ap_mpm_register_poll_callback_timeout().
>
> While at it, add comments about why we need the dedicated pfds/subpool.
>
>
> Modified:
>     httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c
>
> Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c?rev=1879438&r1=1879437&r2=1879438&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c (original)
> +++ httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c Thu Jul  2 12:22:07 2020

> @@ -94,16 +95,24 @@ static void proxy_wstunnel_callback(void
>          ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, baton->r,
>                        "proxy_wstunnel_callback suspend");
>  
> -        if (baton->pfds) {
> -            apr_pollfd_t *async_pfds = (void *)baton->pfds->elts;
> -            apr_pollfd_t *tunnel_pfds = (void *)baton->tunnel->pfds->elts;
> -            async_pfds[0].reqevents = tunnel_pfds[0].reqevents;
> -            async_pfds[1].reqevents = tunnel_pfds[1].reqevents;
> -        }
> -        else {
> +        if (!baton->pfds) {

Can this still happen with the changes below?

> +            /* Create the MPM's (baton->)pfds off of our tunnel's, and
> +             * overwrite its pool with a subpool since the MPM will use
> +             * that to alloc its own temporary data, which we want to
> +             * clear on the next round (above) to avoid leaks.
> +             */
>              baton->pfds = apr_array_copy(baton->r->pool, baton->tunnel->pfds);
>              apr_pool_create(&baton->pfds->pool, baton->r->pool);
>          }
> +        else {
> +            /* Update only reqevents of the MPM's pfds with our tunnel's,
> +             * the rest didn't change.
> +             */
> +            APR_ARRAY_IDX(baton->pfds, 0, apr_pollfd_t).reqevents =
> +                APR_ARRAY_IDX(baton->tunnel->pfds, 0, apr_pollfd_t).reqevents;
> +            APR_ARRAY_IDX(baton->pfds, 1, apr_pollfd_t).reqevents =
> +                APR_ARRAY_IDX(baton->tunnel->pfds, 1, apr_pollfd_t).reqevents;
> +        }
>  
>          ap_mpm_register_poll_callback_timeout(baton->pfds,
>                                                proxy_wstunnel_callback,

Regards

RĂ¼diger
Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r1879438 - /httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c

Yann Ylavic
On Thu, Jul 2, 2020 at 2:32 PM Ruediger Pluem <[hidden email]> wrote:

>
> On 7/2/20 2:22 PM, [hidden email] wrote:
> > Author: ylavic
> > Date: Thu Jul  2 12:22:07 2020
> > New Revision: 1879438
> >
> > URL: http://svn.apache.org/viewvc?rev=1879438&view=rev
> > Log:
> > mod_proxy_wstunnel: follow up to r1879418: handle first async lifetime too.
> >
> > Create the dedicated pfds and subpool in proxy_wstunnel_request() too, for
> > the first call to ap_mpm_register_poll_callback_timeout().
> >
> > While at it, add comments about why we need the dedicated pfds/subpool.
> >
> >
> > Modified:
> >     httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c
> >
> > Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c
> > URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c?rev=1879438&r1=1879437&r2=1879438&view=diff
> > ==============================================================================
> > --- httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c (original)
> > +++ httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c Thu Jul  2 12:22:07 2020
>
> > @@ -94,16 +95,24 @@ static void proxy_wstunnel_callback(void
> >          ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, baton->r,
> >                        "proxy_wstunnel_callback suspend");
> >
> > -        if (baton->pfds) {
> > -            apr_pollfd_t *async_pfds = (void *)baton->pfds->elts;
> > -            apr_pollfd_t *tunnel_pfds = (void *)baton->tunnel->pfds->elts;
> > -            async_pfds[0].reqevents = tunnel_pfds[0].reqevents;
> > -            async_pfds[1].reqevents = tunnel_pfds[1].reqevents;
> > -        }
> > -        else {
> > +        if (!baton->pfds) {
>
> Can this still happen with the changes below?

No, fixed in r1879449.

Thanks;
Yann.