]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Added ostream.blocking boolean
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 16 May 2016 16:33:40 +0000 (19:33 +0300)
committerGitLab <gitlab@git.dovecot.net>
Wed, 18 May 2016 12:21:30 +0000 (15:21 +0300)
Similar to istream.blocking.

src/lib/ostream-buffer.c
src/lib/ostream-file.c
src/lib/ostream-null.c
src/lib/ostream.c
src/lib/ostream.h

index 3507ec4408f558595a230912e4563214a02d652d..75baa09cd4db0e1d52b58692e17ef7d3c316dcf9 100644 (file)
@@ -59,6 +59,7 @@ struct ostream *o_stream_create_buffer(buffer_t *buf)
        struct ostream *output;
 
        bstream = i_new(struct buffer_ostream, 1);
+       bstream->ostream.ostream.blocking = TRUE;
        bstream->ostream.max_buffer_size = (size_t)-1;
        bstream->ostream.seek = o_stream_buffer_seek;
        bstream->ostream.sendv = o_stream_buffer_sendv;
index f3593e4037c6846f2cd8926a7cd68dbbfdb2d34f..b7449e7b5f7123973ea1e61a006148e5f9e1aeb1 100644 (file)
@@ -1023,6 +1023,7 @@ o_stream_create_fd_file(int fd, uoff_t offset, bool autoclose_fd)
        fstream_init_file(fstream);
        fstream->real_offset = offset;
        fstream->buffer_offset = offset;
+       ostream->blocking = fstream->file;
        ostream->offset = offset;
        return ostream;
 }
index 7c00284718e2ad5622d292bbd5b319cc5bc86c32..9f9d0fe03e33ddbf91b1fc2113715d9231914190 100644 (file)
@@ -23,6 +23,7 @@ struct ostream *o_stream_create_null(void)
        struct ostream *output;
 
        stream = i_new(struct ostream_private, 1);
+       stream->ostream.blocking = TRUE;
        stream->sendv = o_stream_null_sendv;
 
        output = o_stream_create(stream, NULL, -1);
index 3733d8a45d776288a2257c35457d4298d61a8c04..b23025b906a0d1949536ab54a9f9f723b62d2ee8 100644 (file)
@@ -252,6 +252,7 @@ o_stream_sendv_int(struct ostream *stream, const struct const_iovec *iov,
                        i_assert(stream->stream_errno != 0);
                        errno = stream->stream_errno;
                } else {
+                       i_assert(!stream->blocking);
                        stream->overflow = TRUE;
                        *overflow_r = TRUE;
                }
@@ -578,6 +579,7 @@ o_stream_create(struct ostream_private *_stream, struct ostream *parent, int fd)
        _stream->fd = fd;
        _stream->ostream.real_stream = _stream;
        if (parent != NULL) {
+               _stream->ostream.blocking = parent->blocking;
                _stream->parent = parent;
                o_stream_ref(parent);
 
@@ -630,6 +632,7 @@ struct ostream *o_stream_create_error(int stream_errno)
        struct ostream *output;
 
        stream = i_new(struct ostream_private, 1);
+       stream->ostream.blocking = TRUE;
        stream->ostream.closed = TRUE;
        stream->ostream.stream_errno = stream_errno;
 
index bb10c82c6c0e9a1d50d7b790873ce92e25d07892..37aae551c5ef071dabf430d9469db7af00585d1d 100644 (file)
@@ -14,6 +14,8 @@ struct ostream {
           functions was neither sent nor buffered. It's never unset inside
           ostream code. */
        unsigned int overflow:1;
+       /* o_stream_send() writes all the data or returns failure */
+       unsigned int blocking:1;
        unsigned int closed:1;
 
        struct ostream_private *real_stream;