You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Randy Terbush <ra...@zyzzyva.com> on 1997/03/07 01:02:54 UTC

resources not getting freed

In http_main.c:1775

In the child_main() loop:

Why do we break if the connection is !current_conn->keepalive?

destroy_pool() does not seem to get called in this case.


        /*
         * Read and process each request found on our connection
         * until no requests are left or we decide to close.
         */
 
        for (;;) {
            r = read_request(current_conn);
            (void)update_child_status(child_num, SERVER_BUSY_WRITE, r);
 
            if (r) process_request(r); /* else premature EOF --- ignore */
#if defined(STATUS) 
            if (r) increment_counts(child_num,r,1);
#endif
            if (!r || !current_conn->keepalive)
                break;
 
            destroy_pool(r->pool);
            (void)update_child_status(child_num, SERVER_BUSY_KEEPALIVE,
                                      (request_rec*)NULL);

            sync_scoreboard_image();
            if (scoreboard_image->global.exit_generation >= generation) {
                bclose(conn_io);
                bclose(conn_io);
                exit(0);
            }
        }



Re: resources not getting freed

Posted by Dean Gaudet <dg...@arctic.org>.
Yeah but a clear_pool() is performed on the parent of the r->pool next
time through at the top of the child_main loop. 

Dean

On Thu, 6 Mar 1997, Randy Terbush wrote:

> In http_main.c:1775
> 
> In the child_main() loop:
> 
> Why do we break if the connection is !current_conn->keepalive?
> 
> destroy_pool() does not seem to get called in this case.
> 
> 
>         /*
>          * Read and process each request found on our connection
>          * until no requests are left or we decide to close.
>          */
>  
>         for (;;) {
>             r = read_request(current_conn);
>             (void)update_child_status(child_num, SERVER_BUSY_WRITE, r);
>  
>             if (r) process_request(r); /* else premature EOF --- ignore */
> #if defined(STATUS) 
>             if (r) increment_counts(child_num,r,1);
> #endif
>             if (!r || !current_conn->keepalive)
>                 break;
>  
>             destroy_pool(r->pool);
>             (void)update_child_status(child_num, SERVER_BUSY_KEEPALIVE,
>                                       (request_rec*)NULL);
> 
>             sync_scoreboard_image();
>             if (scoreboard_image->global.exit_generation >= generation) {
>                 bclose(conn_io);
>                 bclose(conn_io);
>                 exit(0);
>             }
>         }
> 
> 
>