[Dovecot] 1.0-test70
Timo Sirainen
tss at iki.fi
Sat May 28 14:33:29 EEST 2005
On 27.5.2005, at 09:15, Jens Laas wrote:
>> OK, I was on the right track, but didn't think that calling
>> client_input() in client_output() could break it.
>
> Still no luck.
Well, one more fix :) This is the only patch you need:
diff -u -r1.48 -r1.50
--- ostream-file.c 26 Apr 2005 11:08:16 -0000 1.48
+++ ostream-file.c 28 May 2005 11:31:19 -0000 1.50
@@ -349,18 +349,27 @@
struct file_ostream *fstream = context;
int ret;
+ /* Set flush_pending = FALSE first before calling the flush
callback,
+ and change it to TRUE only if callback returns 0. That way
the
+ callback can call o_stream_set_flush_pending() again and we
don't
+ forget it even if flush callback returns 1. */
+ fstream->flush_pending = FALSE;
+
o_stream_ref(&fstream->ostream.ostream);
if (fstream->ostream.callback != NULL)
ret =
fstream->ostream.callback(fstream->ostream.context);
else
ret = _flush(&fstream->ostream);
- if (ret > 0 && IS_STREAM_EMPTY(fstream) && fstream->io != NULL)
{
+ if (ret == 0)
+ fstream->flush_pending = TRUE;
+
+ if (!fstream->flush_pending &&
+ IS_STREAM_EMPTY(fstream) && fstream->io != NULL) {
/* all sent */
io_remove(fstream->io);
fstream->io = NULL;
}
- fstream->flush_pending = ret <= 0;
o_stream_unref(&fstream->ostream.ostream);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
URL: <http://dovecot.org/pipermail/dovecot/attachments/20050528/5c143949/attachment-0001.bin>
More information about the dovecot
mailing list