diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2013-06-06 17:31:31 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2013-06-06 17:31:31 +0100 |
commit | 55e35bf938fcdf95f59950bae2674f1606e306c3 (patch) | |
tree | adc7084a50b4916314fb64ab79cafd7551b2cecb /src | |
parent | b96a568fa2fd9ddb1643d6ab3bb1cd1ddea5f166 (diff) | |
download | rspamd-55e35bf938fcdf95f59950bae2674f1606e306c3.tar.gz rspamd-55e35bf938fcdf95f59950bae2674f1606e306c3.zip |
Update buffers logic for streaming read.
Diffstat (limited to 'src')
-rw-r--r-- | src/buffer.c | 11 | ||||
-rw-r--r-- | src/worker.c | 8 |
2 files changed, 9 insertions, 10 deletions
diff --git a/src/buffer.c b/src/buffer.c index c81c6a686..5912f7040 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -523,9 +523,16 @@ read_buffers (gint fd, rspamd_io_dispatcher_t * d, gboolean skip_read) case BUFFER_ANY: res.begin = d->in_buf->data->begin; res.len = len; + if (d->read_callback) { - if (!d->read_callback (&res, d->user_data)) { - return; + /* + * Actually we do not want to send zero sized + * buffers to a read callback + */ + if (! (d->want_read && res.len == 0)) { + if (!d->read_callback (&res, d->user_data)) { + return; + } } if (d->policy != saved_policy) { debug_ip("policy changed during callback, restart buffer's processing"); diff --git a/src/worker.c b/src/worker.c index e00ec8d4d..54cb540d3 100644 --- a/src/worker.c +++ b/src/worker.c @@ -308,14 +308,6 @@ read_socket (f_str_t * in, void *arg) task->dispatcher->want_read = FALSE; } else { - if (task->dispatcher->want_read && in->len == 0) { - /* - * Skip initial zero length string remain from - * buffer policy switch - */ - task->dispatcher->want_read = FALSE; - return TRUE; - } task->dispatcher->want_read = FALSE; if (in->len > 0) { if (task->msg->begin == NULL) { |