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