Skip to content

LWP over HTTPS eats up to 100% of CPU on either slow connection or server [rt.cpan.org #80444] #34

@oalders

Description

@oalders

Migrated from rt.cpan.org#80444 (status was 'new')

Requestors:

From pavel.strashkin@gmail.com on 2012-10-28 04:13:45:

Hello there,

The reason why it happens (subject) is because it calls read/sysread millions of
times without waiting for read event. It fails with EAGAIN. I was
looking at the code and here is what i saw:

== lib / LWP / Protocol / https.pm ==
our @ISA = qw(Net::HTTPS LWP::Protocol::http::SocketMethods);
== lib / LWP / Protocol / https.pm ==

The parents order. Because Net::HTTPS goes first, it handles the sysread call.
That means sysread/can_read/select/sysread sequence from SocketMethods
never happens.
Looks it easy to fix, but it is not. You can't just change the order.
In this case sysread would not reach IO::Socket::SSL.

What i could do and it actually worked for me is copy/paste
sysread/can_read from SocketMethods and call IO::Socket::SSL::sysread
at the end. I guess there should be better way.

Thank you!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions