diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-07-02 15:51:16 +0400 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-07-02 15:51:16 +0400 |
commit | 59ecc76a83abd9d57e2c808f34d4d27568eeed33 (patch) | |
tree | 5a670c41f2ddc3766c6c2256a0128988ce54695e /src/buffer.c | |
parent | 3123a6a1d6f18c31801b30e523aec9553be31177 (diff) | |
download | rspamd-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.c | 18 |
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; |