dovecot-1.2: Added struct istream.readable_fd, which is used to ...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Jun 28 04:08:53 EEST 2009
details: http://hg.dovecot.org/dovecot-1.2/rev/b1a27ed69e60
changeset: 9170:b1a27ed69e60
user: Timo Sirainen <tss at iki.fi>
date: Sat Jun 27 20:53:35 2009 -0400
description:
Added struct istream.readable_fd, which is used to determine if sendfile() can be used.
diffstat:
12 files changed, 16 insertions(+), 4 deletions(-)
src/lib-mail/istream-header-filter.c | 1 +
src/lib-storage/index/mbox/istream-raw-mbox.c | 1 +
src/lib/istream-concat.c | 1 +
src/lib/istream-crlf.c | 1 +
src/lib/istream-data.c | 1 +
src/lib/istream-file.c | 1 +
src/lib/istream-limit.c | 1 +
src/lib/istream-mmap.c | 1 +
src/lib/istream-seekable.c | 1 +
src/lib/istream.h | 2 ++
src/lib/ostream-file.c | 2 +-
src/plugins/zlib/istream-zlib.c | 7 ++++---
diffs (137 lines):
diff -r 389148f79d49 -r b1a27ed69e60 src/lib-mail/istream-header-filter.c
--- a/src/lib-mail/istream-header-filter.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib-mail/istream-header-filter.c Sat Jun 27 20:53:35 2009 -0400
@@ -429,6 +429,7 @@ i_stream_create_header_filter(struct ist
mstream->istream.sync = i_stream_header_filter_sync;
mstream->istream.stat = i_stream_header_filter_stat;
+ mstream->istream.istream.readable_fd = FALSE;
mstream->istream.istream.blocking = input->blocking;
mstream->istream.istream.seekable = input->seekable;
diff -r 389148f79d49 -r b1a27ed69e60 src/lib-storage/index/mbox/istream-raw-mbox.c
--- a/src/lib-storage/index/mbox/istream-raw-mbox.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib-storage/index/mbox/istream-raw-mbox.c Sat Jun 27 20:53:35 2009 -0400
@@ -451,6 +451,7 @@ i_stream_create_raw_mbox(struct istream
rstream->istream.sync = i_stream_raw_mbox_sync;
rstream->istream.stat = i_stream_raw_mbox_stat;
+ rstream->istream.istream.readable_fd = input->readable_fd;
rstream->istream.istream.blocking = input->blocking;
rstream->istream.istream.seekable = input->seekable;
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream-concat.c
--- a/src/lib/istream-concat.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream-concat.c Sat Jun 27 20:53:35 2009 -0400
@@ -269,6 +269,7 @@ struct istream *i_stream_create_concat(s
cstream->istream.seek = i_stream_concat_seek;
cstream->istream.stat = i_stream_concat_stat;
+ cstream->istream.istream.readable_fd = FALSE;
cstream->istream.istream.blocking = blocking;
cstream->istream.istream.seekable = seekable;
return i_stream_create(&cstream->istream, NULL, -1);
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream-crlf.c
--- a/src/lib/istream-crlf.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream-crlf.c Sat Jun 27 20:53:35 2009 -0400
@@ -202,6 +202,7 @@ i_stream_create_crlf_full(struct istream
cstream->istream.seek = i_stream_crlf_seek;
cstream->istream.stat = i_stream_crlf_stat;
+ cstream->istream.istream.readable_fd = FALSE;
cstream->istream.istream.blocking = input->blocking;
cstream->istream.istream.seekable = FALSE;
return i_stream_create(&cstream->istream, input,
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream-data.c
--- a/src/lib/istream-data.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream-data.c Sat Jun 27 20:53:35 2009 -0400
@@ -27,6 +27,7 @@ struct istream *i_stream_create_from_dat
stream->read = i_stream_data_read;
stream->seek = i_stream_data_seek;
+ stream->istream.readable_fd = FALSE;
stream->istream.blocking = TRUE;
stream->istream.seekable = TRUE;
(void)i_stream_create(stream, NULL, -1);
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream-file.c
--- a/src/lib/istream-file.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream-file.c Sat Jun 27 20:53:35 2009 -0400
@@ -171,6 +171,7 @@ struct istream *i_stream_create_fd(int f
fstream->istream.istream.blocking = TRUE;
fstream->istream.istream.seekable = TRUE;
}
+ fstream->istream.istream.readable_fd = TRUE;
return i_stream_create(&fstream->istream, NULL, fd);
}
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream-limit.c
--- a/src/lib/istream-limit.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream-limit.c Sat Jun 27 20:53:35 2009 -0400
@@ -131,6 +131,7 @@ struct istream *i_stream_create_limit(st
lstream->istream.seek = i_stream_limit_seek;
lstream->istream.stat = i_stream_limit_stat;
+ lstream->istream.istream.readable_fd = input->readable_fd;
lstream->istream.istream.blocking = input->blocking;
lstream->istream.istream.seekable = input->seekable;
return i_stream_create(&lstream->istream, input,
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream-mmap.c
--- a/src/lib/istream-mmap.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream-mmap.c Sat Jun 27 20:53:35 2009 -0400
@@ -219,6 +219,7 @@ struct istream *i_stream_create_mmap(int
mstream->istream.sync = i_stream_mmap_sync;
mstream->istream.stat = i_stream_mmap_stat;
+ mstream->istream.istream.readable_fd = TRUE;
mstream->istream.abs_start_offset = start_offset;
istream = i_stream_create(&mstream->istream, NULL, fd);
istream->mmaped = TRUE;
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream-seekable.c
--- a/src/lib/istream-seekable.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream-seekable.c Sat Jun 27 20:53:35 2009 -0400
@@ -319,6 +319,7 @@ i_stream_create_seekable(struct istream
sstream->istream.seek = i_stream_seekable_seek;
sstream->istream.stat = i_stream_seekable_stat;
+ sstream->istream.istream.readable_fd = FALSE;
sstream->istream.istream.blocking = blocking;
sstream->istream.istream.seekable = TRUE;
return i_stream_create(&sstream->istream, NULL, -1);
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/istream.h
--- a/src/lib/istream.h Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/istream.h Sat Jun 27 20:53:35 2009 -0400
@@ -11,6 +11,8 @@ struct istream {
unsigned int mmaped:1; /* be careful when copying data */
unsigned int blocking:1; /* read() shouldn't return 0 */
unsigned int closed:1;
+ unsigned int readable_fd:1; /* fd can be read directly if necessary
+ (for sendfile()) */
unsigned int seekable:1; /* we can seek() backwards */
unsigned int eof:1; /* read() has reached to end of file
(but may still be data available in buffer) */
diff -r 389148f79d49 -r b1a27ed69e60 src/lib/ostream-file.c
--- a/src/lib/ostream-file.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/lib/ostream-file.c Sat Jun 27 20:53:35 2009 -0400
@@ -783,7 +783,7 @@ static off_t o_stream_file_send_istream(
off_t ret;
int in_fd;
- in_fd = i_stream_get_fd(instream);
+ in_fd = !instream->readable_fd ? -1 : i_stream_get_fd(instream);
if (in_fd == foutstream->fd) {
/* copying data within same fd. we'll have to be careful with
diff -r 389148f79d49 -r b1a27ed69e60 src/plugins/zlib/istream-zlib.c
--- a/src/plugins/zlib/istream-zlib.c Sun Jun 28 00:22:44 2009 +0200
+++ b/src/plugins/zlib/istream-zlib.c Sat Jun 27 20:53:35 2009 -0400
@@ -246,6 +246,7 @@ struct istream *i_stream_create_zlib(int
zstream->istream.istream.seekable = TRUE;
}
- return i_stream_create(&zstream->istream, NULL, -1);
-}
-#endif
+ zstream->istream.istream.readable_fd = FALSE;
+ return i_stream_create(&zstream->istream, NULL, fd);
+}
+#endif
More information about the dovecot-cvs
mailing list