summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2015-10-28 21:27:39 +0100
committerSpamd Stats <spamd-stats@vm-mail.spline.inf.fu-berlin.de>2015-10-28 21:27:39 +0100
commit403b8cb313a2122fee8a490a99be9aef9038a74e (patch)
tree84ad5c6383bb9f6437bae44d5da412ff1c7a8e8c
parent0fa4381419fcc88addbdf2e023c0f136c5fe195b (diff)
downloadspamd-stats-master.tar.gz
spamd-stats-master.tar.bz2
spamd-stats-master.zip
stats: Serialized data could be more than one lineHEADmaster
We need to buffer the incomming data and process is at whole if we receive an EOF. Storabel::freeze can produce multiple lines.
-rwxr-xr-xstats.pl15
1 files changed, 7 insertions, 8 deletions
diff --git a/stats.pl b/stats.pl
index 4d54e35..19a1b5f 100755
--- a/stats.pl
+++ b/stats.pl
@@ -25,21 +25,20 @@ sub my_die {
tcp_connect "unix/", $socket, sub {
my ($fh) = @_ or my_die("Unable to connect to socket: $!");;
+ my $data;
my $h; $h = new AnyEvent::Handle
fh => $fh,
on_eof => sub {
- $h->destroy;
- my_die('Connection closed.');
+ # read stats data
+ my $stats = Storable::thaw($data);
+
+ print "OK | ham=$stats->{ham};;;0 spam=$stats->{spam};;;0 block=$stats->{block};;;0\n";
+ $cv->send;
},
on_read => sub {
$h->push_read(line => sub {
my ($h, $line) = @_;
-
- # read stats data
- my $stats = Storable::thaw($line);
-
- print "OK | ham=$stats->{ham};;;0 spam=$stats->{spam};;;0 block=$stats->{block};;;0\n";
- $cv->send;
+ $data .= "$line\n";
});
};
};