in reply to Re^4: Fast provider feeding slow consumer
in thread Fast provider feeding slow consumer
Since there is still some queries that returns empty values,
Leandro, this appears to be a bug in IO::Socket::INET::Daemon, in as much as, it frequently calls the data callback when there is nothing to available read; and getline returns undef.
I do not have the time to debug that module; but the simple workaround to it, is to move one line of code in your callback. change this:
23 callback => { data => 24 sub { 25 my ($io, $host) = @_; 26 chomp( my $line = <$io> ); 27 return 0 unless $line; ####### MOVE THIS LINE + UP AND TEST FOR DEFINEDNESS ################### 28 $Qout->enqueue( $line ); ## send work to listen +er (is not sending to walker ?) 29 return !0; 30 } 31 },
To become this:
23 callback => { data => 24 sub { 25 my ($io, $host) = @_; 26 return 0 unless defined $line; ################ M +OVED LINE ##################### 27 chomp( my $line = <$io> ); 28 $Qout->enqueue( $line ); ## send work to walker 29 return !0; 30 } 31 },
I think that should get you further.
(And yes, the comment was wrong!).
(And BTW: you really should get into the habit of using strict and my. Debugging would have been much simpler had your code been strict compliant.)
|
---|