ClientProxy detection fix
dormando
dormando at rydia.net
Wed Oct 25 17:24:00 UTC 2006
Yo,
The attached patch has stopped perlbal from crashing on me. It's run
overnight without further issues on my test instance, so I'm rolling it
out to the other 23.
This isn't a real fix... It's more ineffecient and doesn't really fix
the actual problem. I think what needs to happen is ClientHTTPBase.pm's
http_response_close needs to actually undef itself out of an attached
backend if one exists. However, I'm not 100% positive that's a good fix
either, so I'll wait for some feedback if possible :(
It might still be possible that the issue's the adopt_base_client not
getting called right in some circumstances, but I'm doubting it...
-Dormando
-------------- next part --------------
diff -ur Perlbal-1.51.orig/lib/Perlbal/BackendHTTP.pm Perlbal-1.51/lib/Perlbal/BackendHTTP.pm
--- Perlbal-1.51.orig/lib/Perlbal/BackendHTTP.pm 2006-09-06 14:12:32.000000000 -0700
+++ Perlbal-1.51/lib/Perlbal/BackendHTTP.pm 2006-10-25 10:06:06.000000000 -0700
@@ -135,8 +135,9 @@
$self->SUPER::close(@_);
# tell our client that we're gone
+ # the client may reset before we get here
if (my $client = $self->{client}) {
- $client->backend(undef);
+ $client->backend(undef) if $client->isa('Perlbal::ClientProxy');
$self->{client} = undef;
}
@@ -475,7 +476,9 @@
# to use the end of the stream, or because a bad request error,
# which I can't totally understand. in any case, we have
# no client so all we can do is close this backend.
- return $self->close('read_with_no_client') unless $client;
+ unless ($client && $client->isa('Perlbal::ClientProxy')) {
+ return $self->close('read_with_no_client');
+ }
unless ($self->{res_headers}) {
return unless $self->read_response_headers;
More information about the perlbal
mailing list