From 1cb83fe999b03d2c913ca409650036a8d4dd462e Mon Sep 17 00:00:00 2001 From: William Heimbigner Date: Sat, 26 Dec 2015 23:35:16 -0700 Subject: Fix 100% cpu usage from how FIFO was being select()ed --- lib/ASM/Fifo.pm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/ASM/Fifo.pm b/lib/ASM/Fifo.pm index 1a480f8..81170c5 100644 --- a/lib/ASM/Fifo.pm +++ b/lib/ASM/Fifo.pm @@ -14,20 +14,21 @@ sub new "conn" => $args[1] }; mkfifo("fifo", 0777); - sysopen( my $fifo, "fifo", O_NONBLOCK ); + open( my $fifo, "+<", "fifo" ); $self->{fifo} = $fifo; bless($self); - $self->{irc}->addfh( $self->{fifo}, sub { $self->process(@_); }, 'r' ); + $self->{irc}->addfh( $self->{fifo}, $self->can('process'), 'r', $self ); return $self; } sub process { my ($self, $fifo) = @_; - my $line = readline($fifo); - return unless defined($line); - chomp $line; - $self->{conn}->privmsg($::settings->{masterchan}, $line); + my $lines; + $fifo->sysread($lines, 10240); + foreach my $line (split /\n/, $lines) { + $self->{conn}->privmsg($::settings->{masterchan}, $line); } + return 0; } 1; -- cgit v1.2.3