Patch: backend clobber prevention

Eric Lambrecht eml at guba.com
Tue Dec 12 06:07:18 UTC 2006


Brad Fitzpatrick wrote:
> Eric,
> 
> I think this is now fixed as well in svn, but from the other side of
> things?  (backends properly clear out their client reference now...)

We still get a crash:

> Running.
> beginning run
> crash log: Not an ARRAY reference at /usr/share/perl5/Perlbal/ClientProxy.pm line 223.

Our version might be ever so slightly different than what's in SVN.. 
that line corresponds to:

> # returns true if this ClientProxy is too many bytes behind the backend
> sub too_far_behind_backend {
>     my Perlbal::ClientProxy $self    = $_[0];
>     my Perlbal::BackendHTTP $backend = $self->{backend}   or return 0;
> 
>     # if a backend doesn't have a service, it's a
>     # ReproxyManager-created backend, and thus it should use the
>     # 'buffer_size_reproxy_url' parameter for acceptable buffer
>     # widths, and not the regular 'buffer_size'.  this lets people
>     # tune buffers depending on the types of webservers.  (assumption
>     # being that reproxied-to webservers are event-based and it's okay
>     # to tie the up longer in favor of using less buffer memory in
>     # perlbal)
>     my $max_buffer = defined $backend->{service} ?
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ here
>         $self->{service}->{buffer_size} :
>         $self->{service}->{buffer_size_reproxy_url};
> 
>     return $self->{write_buf_size} > $max_buffer;
> }
>                                                                                                                                                     

Eric....


> 
> - Brad
> 
> 
> On Thu, 12 Oct 2006, Eric Lambrecht wrote:
> 
> 
>>I swear I sent this patch out a while ago, but it isn't in the latest
>>SVN perlbal code and it just bit us in the butt again, now that we're
>>updating to it.
>>
>>There is a condition where a ClientProxy can be given a new Backend C,
>>but its old Backend B retains a reference to the ClientProxy. When the
>>Backend B is closed, it tries to null out the ClientProxy's reference to
>>the Backend B, but actually ends up clobbering the ClientProxy's
>>reference to Backend C. This results in a horrible memory leak when
>>you're serving up big files like we are.
>>
>>Anyway.. the attached patch fixes it.
>>
>>Eric...
>>



More information about the perlbal mailing list