aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-07-02 15:51:16 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-07-02 15:51:16 +0400
commit59ecc76a83abd9d57e2c808f34d4d27568eeed33 (patch)
tree5a670c41f2ddc3766c6c2256a0128988ce54695e /src/buffer.c
parent3123a6a1d6f18c31801b30e523aec9553be31177 (diff)
downloadrspamd-59ecc76a83abd9d57e2c808f34d4d27568eeed33.tar.gz
rspamd-59ecc76a83abd9d57e2c808f34d4d27568eeed33.zip
* Add urls output to urls command
* Improve performance of dispatcher by avoiding double allocating and copying of dynamic buffers
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/buffer.c b/src/buffer.c
index bff75fc39..f8d027307 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -375,15 +375,23 @@ rspamd_set_dispatcher_policy (rspamd_io_dispatcher_t *d,
void
rspamd_dispatcher_write (rspamd_io_dispatcher_t *d,
void *data,
- size_t len, gboolean delayed)
+ size_t len, gboolean delayed, gboolean allocated)
{
rspamd_buffer_t *newbuf;
newbuf = memory_pool_alloc (d->pool, sizeof (rspamd_buffer_t));
- newbuf->data = fstralloc (d->pool, len);
-
- /* We need to copy data to temporary internal buffer to avoid using of stack variables */
- memcpy (newbuf->data->begin, data, len);
+ if (!allocated) {
+ newbuf->data = fstralloc (d->pool, len);
+
+ /* We need to copy data to temporary internal buffer to avoid using of stack variables */
+ memcpy (newbuf->data->begin, data, len);
+ }
+ else {
+ newbuf->data = memory_pool_alloc (d->pool, sizeof (f_str_t));
+ newbuf->data->begin = data;
+ newbuf->data->size = len;
+ }
+
newbuf->pos = newbuf->data->begin;
newbuf->data->len = len;