[prev in list] [next in list] [prev in thread] [next in thread] 

List:       apache-modperl
Subject:    Re: ap_save_brigade
From:       dorian taylor <dorian.taylor.lists () gmail ! com>
Date:       2013-07-22 9:08:10
Message-ID: CAMrqWm3GLkP9hVYGEys28n4EwW6=wnMXRUvWzGT_xwEMfHx6Gw () mail ! gmail ! com
[Download RAW message or body]

OK, I have a clue why ap_save_brigade wasn't implemented. I looked at
its source and it basically does this:

# XXX UNTESTED CODE
sub Apache2::Filter::save_brigade {
    my ($f, $saveto, $bb, $pool) = @_;
    # XXX should this be $f->r->pool?
    $pool ||= $f->c->pool;

    my $ret = APR::Const::SUCCESS;

    for (my $b = $bb->first; !$b->is_eos; $b = $bb->next($b)) {
        my $rv = $b->setaside($pool);

        if ($rv == APR::Const::ENOTIMPL) {
            my $len = $b->read(my $data);
            # apparently this changes the bucket type?
            $rv = $b->setaside($pool) if $len;
        }

        # check for some other kind of error
        if ($rv != APR::Const::SUCCESS) {
            $ret = $rv;
            return $rv if $rv != APR::Const::ENOTIMPL;
        }
    }

    # now concatenate the brigade to the target
    $saveto->concat($bb);

    return $ret;
}

The difference in the C version is that saveto and bb are pointers to
pointers to brigades, so if saveto is NULL, ap_save_brigade creates
one, which would be kind of icky for a Perl interface. It also means
that patch I submitted in 2005 was probably broken anyway.

There's really no reason why it couldn't be implemented in mod_perl in
a way that stipulates passing a target brigade in as input though. I'm
pretty sure it'd be a heck of a lot more efficient than that
subroutine I just wrote above.


On Mon, Jul 22, 2013 at 12:14 AM, dorian taylor
<dorian.taylor.lists@gmail.com> wrote:
> Hello,
> 
> Is there a reason why ap_save_brigade hasn't been implemented? Does it
> have special needs?
> 
> (Funnily, after googling this issue, I found I had asked the same
> question in 2005:
> http://mail-archives.apache.org/mod_mbox/perl-modperl/200505.mbox/%3C20050509222133.GB31691@foobarsystems.com%3E
>  —and apparently written a patch.)
> 
> Cheers,
> 
> --
> Dorian Taylor
> http://doriantaylor.com/



-- 
Dorian Taylor
http://doriantaylor.com/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic