Re: Newbie: Question

"Edward L. Abrams" <[email protected]>
Newsgroups gmane.comp.apache.apreq
Organization bitScrap
Message-ID <[email protected]>
Thank you very much.  Is the following too loose:

      for (b = APR_BRIGADE_FIRST(bb);
           b != APR_BRIGADE_SENTINEL(bb);
           b = APR_BUCKET_NEXT(b))
        {
          if (APR_BUCKET_IS_EOS(b))
            {
              break;
            }
          else if (apr_bucket_read(b, &buf, &bytes, APR_BLOCK_READ) == 
APR_SUCCESS)
            {
              // We have a bucket full of raw data
              apr_file_write(f, buf, &bytes);
              filesize += bytes;
              apr_bucket_delete(b);
            }
        }
    apr_file_close(f);

      if (bb != NULL)
      {
         apr_brigade_cleanup(bb);
      }


Also, a last question: when dealing with file buckets, I understand that 
heap buckets are created as the file is read.  That closely corresponds 
with what you say below.  So my question is: does this mean there is 
more cleanup that has to be done wrt the brigade file->upload, the file 
bucket brigade?  Sometimes it seems to me like the code above leaks too 
-- that may be because of the difference between it and your suggestion 
(which I don't really see a significant difference) or because of 
something having specifically to do with cleaning up after filebody.

Anyway, thank you!

Eddie




Joe Schaefer wrote:
> "Edward L. Abrams" <[email protected]> writes:
>
>   
>>   // dump the values in this brigade:
>>   for (b = APR_BRIGADE_FIRST(bb);
>>        b != APR_BRIGADE_SENTINEL(bb);
>>        b = APR_BUCKET_NEXT(b))
>>     
>
> This is the source of your leak.
> What you need to do is copy the upload brigade
> and iterate over it using something like
>
>
>     while (!APR_BRIGADE_EMPTY(bb)) {
>        apr_bucket_t *e = APR_BRIGADE_FIRST(bb);
>
>        ...read from the bucket, do something with data...
>
>        apr_bucket_delete(e);
>     }
>
>
> ie, destroy the buckets as you read from them.
> reading from file buckets tends to convert those buckets
> into heap buckets, and unless you delete them as you go,
> you wind up copying the entire spool file into RAM.
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.