Looking at apr_file_flush_locked(), it looks like it doesn't handle short writes for buffered apr_file_t's, upon a short write the unwritten data will be lost.
Here's a patch for this: Index: file_io/unix/readwrite.c =================================================================== --- file_io/unix/readwrite.c (revision 1067340) +++ file_io/unix/readwrite.c (working copy) @@ -409,7 +409,11 @@ rv = errno; } else { thefile->filePtr += written; - thefile->bufpos = 0; + if (written != thefile->bufpos) + memmove(thefile->buffer, + thefile->buffer + written, + thefile->bufpos - written); + thefile->bufpos -= written; } } Beyond this, there's no a mechanism to report that all the buffered data didn't get into the file. Perhaps apr_file_flush() should loop until the entire buffer is written or it gets a non-EINTR error? Blair