dovecot-2.0: istream: Changed default destroy() implementation n...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jun 24 05:01:23 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/02badd89127e
changeset: 9525:02badd89127e
user: Timo Sirainen <tss at iki.fi>
date: Tue Jun 23 22:01:17 2009 -0400
description:
istream: Changed default destroy() implementation not to do parent stream seeking.
The stream's v_offset may be completely different from what parent uses.
diffstat:
2 files changed, 17 insertions(+), 10 deletions(-)
src/lib/istream-limit.c | 16 ++++++++++++++++
src/lib/istream.c | 11 +----------
diffs (57 lines):
diff -r 498965c87314 -r 02badd89127e src/lib/istream-limit.c
--- a/src/lib/istream-limit.c Tue Jun 23 21:18:33 2009 -0400
+++ b/src/lib/istream-limit.c Tue Jun 23 22:01:17 2009 -0400
@@ -8,6 +8,21 @@ struct limit_istream {
uoff_t v_size;
};
+
+static void i_stream_limit_destroy(struct iostream_private *stream)
+{
+ struct limit_istream *lstream = (struct limit_istream *) stream;
+ uoff_t v_offset;
+
+ v_offset = lstream->istream.parent_start_offset +
+ lstream->istream.istream.v_offset;
+ if (lstream->istream.parent->seekable ||
+ v_offset > lstream->istream.parent->v_offset) {
+ /* get to same position in parent stream */
+ i_stream_seek(lstream->istream.parent, v_offset);
+ }
+ i_stream_unref(&lstream->istream.parent);
+}
static ssize_t i_stream_limit_read(struct istream_private *stream)
{
@@ -116,6 +131,7 @@ struct istream *i_stream_create_limit(st
lstream->v_size = v_size;
lstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
+ lstream->istream.iostream.destroy = i_stream_limit_destroy;
lstream->istream.parent = input;
lstream->istream.read = i_stream_limit_read;
lstream->istream.seek = i_stream_limit_seek;
diff -r 498965c87314 -r 02badd89127e src/lib/istream.c
--- a/src/lib/istream.c Tue Jun 23 21:18:33 2009 -0400
+++ b/src/lib/istream.c Tue Jun 23 22:01:17 2009 -0400
@@ -481,19 +481,10 @@ static void i_stream_default_destroy(str
static void i_stream_default_destroy(struct iostream_private *stream)
{
struct istream_private *_stream = (struct istream_private *)stream;
- uoff_t v_offset;
i_free(_stream->w_buffer);
- if (_stream->parent != NULL) {
- v_offset = _stream->parent_start_offset +
- _stream->istream.v_offset;
- if (_stream->parent->seekable ||
- v_offset > _stream->parent->v_offset) {
- /* get to same position in parent stream */
- i_stream_seek(_stream->parent, v_offset);
- }
+ if (_stream->parent != NULL)
i_stream_unref(&_stream->parent);
- }
}
static void
More information about the dovecot-cvs
mailing list