On Thu, 1 Apr 2010 10:31:13 -0400, nstraz@redhat.com wrote: > On Apr 1 16:21, Michal Sojka wrote: > > On Thu, 01 Apr 2010, nstraz@redhat.com wrote: > > thanks for the patch. After some investigation, it seems that you are > > right. What I missed in your commit message is the reason for such > > behaviour i.e. GMimeStream fseek()s in its write method to the position > > recorded when the stream was created, so that in case there is somebody > > else writing to the stream, the writes may overlap. > > Right, and in the case of writing to a pipe, the seek fails and the > file position doesn't change. I found it comparing strace output of > `notmuch show ... > file` and `notmuch show ... | cat > file.` Ah, so the trigger of the bug is that we are currently interleaving calls to printf with GMime writes to a stdout stream. I'm happy to apply this patch to workaround the problem, (and I just did push it with some of my own comments added to the commit message). But isn't this a bug in GMime really? What possible use can it have for doing an fseek on every stream write? That seems broken, and we should report that to the GMime folks. -Carl