… | |
… | |
35 | our $httpevent = new Coro::Signal; |
35 | our $httpevent = new Coro::Signal; |
36 | |
36 | |
37 | our $wait_factor = 0.95; |
37 | our $wait_factor = 0.95; |
38 | |
38 | |
39 | our @transfers = ( |
39 | our @transfers = ( |
40 | (new Coro::Semaphore $MAX_TRANSFERS_SMALL), |
40 | (new transferqueue $MAX_TRANSFERS_SMALL), |
41 | (new Coro::Semaphore $MAX_TRANSFERS_LARGE), |
41 | (new transferqueue $MAX_TRANSFERS_LARGE), |
42 | ); |
42 | ); |
43 | |
43 | |
44 | my @newcons; |
44 | my @newcons; |
45 | my @pool; |
45 | my @pool; |
46 | |
46 | |
… | |
… | |
549 | if ($l) { |
549 | if ($l) { |
550 | sysseek $fh, $l, 0; |
550 | sysseek $fh, $l, 0; |
551 | } |
551 | } |
552 | } |
552 | } |
553 | |
553 | |
554 | my $transfer; # transfer guard |
554 | my $transfer = $queue->start_transfer; |
|
|
555 | my $locked; |
555 | my $bufsize = $::WAIT_BUFSIZE; # initial buffer size |
556 | my $bufsize = $::WAIT_BUFSIZE; # initial buffer size |
556 | |
557 | |
557 | $self->{time} = $::NOW; |
|
|
558 | |
|
|
559 | while ($h > 0) { |
558 | while ($h > 0) { |
560 | unless ($transfer) { |
559 | unless ($locked) { |
561 | if ($transfer ||= $queue->timed_guard($::WAIT_INTERVAL)) { |
560 | if ($locked ||= $transfer->try($::WAIT_INTERVAL)) { |
562 | $bufsize = $::BUFSIZE; |
561 | $bufsize = $::BUFSIZE; |
563 | $self->{time} = $::NOW; |
562 | $self->{time} = $::NOW; |
564 | } |
563 | } |
565 | } |
564 | } |
566 | |
565 | |