Fix aboriginal bug in BufFileDumpBuffer that would cause it to write the
authorTom Lane <[email protected]>
Fri, 1 Jun 2007 23:43:34 +0000 (23:43 +0000)
committerTom Lane <[email protected]>
Fri, 1 Jun 2007 23:43:34 +0000 (23:43 +0000)
wrong data when dumping a bufferload that crosses a component-file boundary.
This probably has not been seen in the wild because (a) component files are
normally 1GB apiece and (b) non-block-aligned buffer usage is relatively
rare.  But it's fairly easy to reproduce a problem if one reduces RELSEG_SIZE
in a test build.  Kudos to Kurt Harriman for spotting the bug.

src/backend/storage/file/buffile.c

index 77dbdcd8f1413576136bd6553875fb7a7d3af228..3b25dfadeb3461df61b95a54bc759da084f003c2 100644 (file)
@@ -292,7 +292,7 @@ BufFileDumpBuffer(BufFile *file)
                                return;                 /* seek failed, give up */
                        file->offsets[file->curFile] = file->curOffset;
                }
-               bytestowrite = FileWrite(thisfile, file->buffer, bytestowrite);
+               bytestowrite = FileWrite(thisfile, file->buffer + wpos, bytestowrite);
                if (bytestowrite <= 0)
                        return;                         /* failed to write */
                file->offsets[file->curFile] += bytestowrite;