On Thu, 2008-10-09 at 08:38 +0200, Andre Hübner wrote: > #6 0x080c9d04 in i_stream_limit_read (stream=0x8118cc8) at > istream-limit.c:83 > left = <value optimized out> > ret = -1 > pos = 65 > __PRETTY_FUNCTION__ = "i_stream_limit_read"
If you still have the core, could you do: fr 6 p *stream Does this happen often? Could you also try with the attached patch? It should trigger the assert earlier.
diff -r 434a8a0edc0a src/lib/istream.c --- a/src/lib/istream.c Tue Oct 14 00:58:13 2008 +0300 +++ b/src/lib/istream.c Tue Oct 14 14:32:33 2008 +0300 @@ -63,6 +63,7 @@ { struct istream_private *_stream = stream->real_stream; ssize_t ret; + size_t orig_count; if (unlikely(stream->closed)) return -1; @@ -70,6 +71,7 @@ stream->eof = FALSE; stream->stream_errno = 0; + orig_count = _stream->pos - _stream->skip; ret = _stream->read(_stream); if (ret == -1) { if (stream->stream_errno != 0) { @@ -79,6 +81,8 @@ } else { i_assert(stream->eof); } + } else if (ret > 0) { + i_assert(orig_count < _stream->pos - _stream->skip); } else { i_assert(ret != 0 || !stream->blocking); }
signature.asc
Description: This is a digitally signed message part