struct timeval timing_start[FS_OP_COUNT];
unsigned int write_pending:1;
+ unsigned int writing_stream:1;
unsigned int metadata_changed:1;
unsigned int read_or_prefetch_counted:1;
void fs_file_close(struct fs_file *file)
{
+ i_assert(!file->writing_stream);
+ i_assert(file->output == NULL);
+
if (file->pending_read_input != NULL)
i_stream_unref(&file->pending_read_input);
if (file->seekable_input != NULL)
struct ostream *fs_write_stream(struct fs_file *file)
{
+ i_assert(!file->writing_stream);
+ i_assert(file->output == NULL);
+
+ file->writing_stream = TRUE;
file->fs->stats.write_count++;
T_BEGIN {
file->fs->v.write_stream(file);
{
int ret;
+ i_assert(file->writing_stream);
+
fs_file_timing_start(file, FS_OP_WRITE);
T_BEGIN {
ret = file->fs->v.write_stream_finish(file, success);
indicated a failure. */
i_assert(success);
}
+ if (ret != 0)
+ file->writing_stream = FALSE;
return ret;
}
{
int ret;
+ i_assert(!file->writing_stream);
+
fs_file_timing_start(file, FS_OP_DELETE);
T_BEGIN {
ret = file->fs->v.delete_file(file);