]> granicus.if.org Git - postgresql/commit
Fix some sloppiness in the new BufFileSize() and BufFileAppend() functions.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 2 May 2018 14:23:13 +0000 (17:23 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 2 May 2018 14:23:13 +0000 (17:23 +0300)
commit445e31bdc749e56376993232e5c2cc4931161322
tree4ca285864a772a64328fed930ec8f20964d15565
parent7f6570b3a8d1aa8e90ab0868eefa5a4236b0ada3
Fix some sloppiness in the new BufFileSize() and BufFileAppend() functions.

There were three related issues:

* BufFileAppend() incorrectly reset the seek position on the 'source' file.
  As a result, if you had called BufFileRead() on the file before calling
  BufFileAppend(), it got confused, and subsequent calls would read/write
  at wrong position.

* BufFileSize() did not work with files opened with BufFileOpenShared().

* FileGetSize() only worked on temporary files.

To fix, change the way BufFileSize() works so that it works on shared
files. Remove FileGetSize() altogether, as it's no longer needed. Remove
buffilesize from TapeShare struct, as the leader process can simply call
BufFileSize() to get the tape's size, there's no need to pass it through
shared memory anymore.

Discussion: https://www.postgresql.org/message-id/CAH2-WznEDYe_NZXxmnOfsoV54oFkTdMy7YLE2NPBLuttO96vTQ@mail.gmail.com
src/backend/storage/file/buffile.c
src/backend/storage/file/fd.c
src/backend/utils/sort/logtape.c
src/backend/utils/sort/tuplesort.c
src/include/storage/fd.h
src/include/utils/logtape.h