From aa8ba3d9d5dea490d376494b4f50b0e7c8480d11 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sat, 27 Oct 2012 22:38:33 +0000 Subject: Make apr_brigade_(v)putstrs more efficient by using apr_brigade_writev instead of apr_brigade_write git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1402903 13f79535-47bb-0310-9956-ffa450edef68 --- buckets/apr_brigade.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'buckets') diff --git a/buckets/apr_brigade.c b/buckets/apr_brigade.c index b22e98220..42403f4a1 100644 --- a/buckets/apr_brigade.c +++ b/buckets/apr_brigade.c @@ -417,17 +417,30 @@ APR_DECLARE(apr_status_t) apr_brigade_vputstrs(apr_bucket_brigade *b, void *ctx, va_list va) { +#define MAX_VECS 8 + struct iovec vec[MAX_VECS]; + apr_size_t i = 0; + for (;;) { - const char *str = va_arg(va, const char *); + char *str = va_arg(va, char *); apr_status_t rv; if (str == NULL) break; - rv = apr_brigade_write(b, flush, ctx, str, strlen(str)); - if (rv != APR_SUCCESS) - return rv; + vec[i].iov_base = str; + vec[i].iov_len = strlen(str); + i++; + + if (i == MAX_VECS) { + rv = apr_brigade_writev(b, flush, ctx, vec, i); + if (rv != APR_SUCCESS) + return rv; + i = 0; + } } + if (i != 0) + return apr_brigade_writev(b, flush, ctx, vec, i); return APR_SUCCESS; } -- cgit v1.2.1