diff --git a/src/backend/storage/file/buffile.c b/src/backend/storage/file/buffile.c index 5315d8a714..9dae2e512f 100644 --- a/src/backend/storage/file/buffile.c +++ b/src/backend/storage/file/buffile.c @@ -410,11 +410,21 @@ BufFileExportFileSet(BufFile *file) */ void BufFileClose(BufFile *file) +{ + BufFileCloseExtended(file, true); +} + +/* + * Close a BufFile with specifying wheter the content is flushed out + */ +void +BufFileCloseExtended(BufFile *file, bool flush) { int i; - /* flush any unwritten data */ - BufFileFlush(file); + /* flush any unwritten data if requested */ + if (flush) + BufFileFlush(file); /* close and delete the underlying file(s) */ for (i = 0; i < file->numFiles; i++) FileClose(file->files[i]); diff --git a/src/backend/utils/sort/tuplestore.c b/src/backend/utils/sort/tuplestore.c index 947a868e56..08c1bcced9 100644 --- a/src/backend/utils/sort/tuplestore.c +++ b/src/backend/utils/sort/tuplestore.c @@ -421,7 +421,7 @@ tuplestore_clear(Tuplestorestate *state) TSReadPointer *readptr; if (state->myfile) - BufFileClose(state->myfile); + BufFileCloseExtended(state->myfile, false); state->myfile = NULL; if (state->memtuples) { @@ -455,7 +455,7 @@ tuplestore_end(Tuplestorestate *state) int i; if (state->myfile) - BufFileClose(state->myfile); + BufFileCloseExtended(state->myfile, false); if (state->memtuples) { for (i = state->memtupdeleted; i < state->memtupcount; i++) diff --git a/src/include/storage/buffile.h b/src/include/storage/buffile.h index 5f6d7c8e3f..d4796f9cb4 100644 --- a/src/include/storage/buffile.h +++ b/src/include/storage/buffile.h @@ -38,6 +38,7 @@ typedef struct BufFile BufFile; extern BufFile *BufFileCreateTemp(bool interXact); extern void BufFileClose(BufFile *file); +extern void BufFileCloseExtended(BufFile *file, bool flush); extern pg_nodiscard size_t BufFileRead(BufFile *file, void *ptr, size_t size); extern void BufFileReadExact(BufFile *file, void *ptr, size_t size); extern size_t BufFileReadMaybeEOF(BufFile *file, void *ptr, size_t size, bool eofOK);