From: Florian Forster Date: Thu, 11 Jul 2013 11:08:11 +0000 (+0200) Subject: statsd plugin: Don't use strtok_r() to split multi-metric packets. X-Git-Tag: collectd-5.4.0~13^2~3 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=57fcbb129aa789857f5028a5195f1e23f444a58a;p=collectd.git statsd plugin: Don't use strtok_r() to split multi-metric packets. Profiling has shown that it is one of the bottle-necks. --- 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 */