From 57fcbb129aa789857f5028a5195f1e23f444a58a Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Thu, 11 Jul 2013 13:08:11 +0200 Subject: [PATCH] statsd plugin: Don't use strtok_r() to split multi-metric packets. Profiling has shown that it is one of the bottle-necks. --- src/statsd.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/statsd.c b/src/statsd.c index a83cc9a2..364b97d7 100644 --- a/src/statsd.c +++ b/src/statsd.c @@ -383,22 +383,32 @@ static int statsd_parse_line (char *buffer) /* {{{ */ static void statsd_parse_buffer (char *buffer) /* {{{ */ { - char *dummy; - char *saveptr = NULL; - char *ptr; - - for (dummy = buffer; - (ptr = strtok_r (dummy, "\r\n", &saveptr)) != NULL; - dummy = NULL) + while (buffer != NULL) { - char *line_orig = sstrdup (ptr); + char orig[64]; + char *next; int status; - status = statsd_parse_line (ptr); + next = strchr (buffer, '\n'); + if (next != NULL) + { + *next = 0; + next++; + } + + if (*buffer == 0) + { + buffer = next; + continue; + } + + sstrncpy (orig, buffer, sizeof (orig)); + + status = statsd_parse_line (buffer); if (status != 0) - ERROR ("statsd plugin: Unable to parse line: \"%s\"", line_orig); + ERROR ("statsd plugin: Unable to parse line: \"%s\"", orig); - sfree (line_orig); + buffer = next; } } /* }}} void statsd_parse_buffer */ -- 2.30.2