]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-fs: Allow multiple fs_read_stream() calls to seekable istreams.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 28 Apr 2016 09:45:01 +0000 (12:45 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 28 Apr 2016 09:48:12 +0000 (12:48 +0300)
This fixes for example calling fs_default_copy() for an istream which was
already opened:

Panic: file fs-api.c: line 528 (fs_read_stream): assertion failed: (!file->istream_open)

src/lib-fs/fs-api.c

index b947a8f1d1be569d882af808535dad4a1b65d2cd..8ee140950e2179787cc8c73dbb59975481d9eb0c 100644 (file)
@@ -555,10 +555,10 @@ struct istream *fs_read_stream(struct fs_file *file, size_t max_buffer_size)
                                                file->fs->temp_path_prefix);
                i_stream_set_name(input, i_stream_get_name(inputs[0]));
                i_stream_unref(&inputs[0]);
-
-               file->seekable_input = input;
-               i_stream_ref(file->seekable_input);
        }
+       file->seekable_input = input;
+       i_stream_ref(file->seekable_input);
+
        if ((file->flags & FS_OPEN_FLAG_ASYNC) == 0 && !input->blocking) {
                /* read the whole input stream before returning */
                while ((ret = i_stream_read_data(input, &data, &size, 0)) >= 0) {