diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index d0a08d20a593b7bf895b2c5da038d0c0939ee5b3..e5a7471931b8d69565d0ce61acd368213f8c1e04 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.87 2001/11/05 17:46:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.88 2002/02/10 22:56:31 tgl Exp $ * * NOTES: * @@ -110,7 +110,7 @@ int max_files_per_process = 1000; #define FileIsNotOpen(file) (VfdCache[file].fd == VFD_CLOSED) -#define FileUnknownPos (-1) +#define FileUnknownPos (-1L) typedef struct vfd { @@ -380,7 +380,6 @@ static void LruDelete(File file) { Vfd *vfdP; - int returnValue; Assert(file != 0); @@ -394,19 +393,21 @@ LruDelete(File file) /* save the seek position */ vfdP->seekPos = (long) lseek(vfdP->fd, 0L, SEEK_CUR); - Assert(vfdP->seekPos != -1); + Assert(vfdP->seekPos != -1L); /* if we have written to the file, sync it before closing */ if (vfdP->fdstate & FD_DIRTY) { - returnValue = pg_fsync(vfdP->fd); - Assert(returnValue != -1); + if (pg_fsync(vfdP->fd)) + elog(DEBUG, "LruDelete: failed to fsync %s: %m", + vfdP->fileName); vfdP->fdstate &= ~FD_DIRTY; } /* close the file */ - returnValue = close(vfdP->fd); - Assert(returnValue != -1); + if (close(vfdP->fd)) + elog(DEBUG, "LruDelete: failed to close %s: %m", + vfdP->fileName); --nfile; vfdP->fd = VFD_CLOSED; @@ -437,7 +438,6 @@ static int LruInsert(File file) { Vfd *vfdP; - int returnValue; Assert(file != 0); @@ -475,8 +475,10 @@ LruInsert(File file) /* seek to the right position */ if (vfdP->seekPos != 0L) { - returnValue = lseek(vfdP->fd, vfdP->seekPos, SEEK_SET); - Assert(returnValue != -1); + long returnValue; + + returnValue = (long) lseek(vfdP->fd, vfdP->seekPos, SEEK_SET); + Assert(returnValue != -1L); } } @@ -824,43 +826,48 @@ OpenTemporaryFile(void) void FileClose(File file) { - int returnValue; + Vfd *vfdP; Assert(FileIsValid(file)); DO_DB(elog(DEBUG, "FileClose: %d (%s)", file, VfdCache[file].fileName)); + vfdP = &VfdCache[file]; + if (!FileIsNotOpen(file)) { - /* remove the file from the lru ring */ Delete(file); /* if we did any writes, sync the file before closing */ - if (VfdCache[file].fdstate & FD_DIRTY) + if (vfdP->fdstate & FD_DIRTY) { - returnValue = pg_fsync(VfdCache[file].fd); - Assert(returnValue != -1); - VfdCache[file].fdstate &= ~FD_DIRTY; + if (pg_fsync(vfdP->fd)) + elog(DEBUG, "FileClose: failed to fsync %s: %m", + vfdP->fileName); + vfdP->fdstate &= ~FD_DIRTY; } /* close the file */ - returnValue = close(VfdCache[file].fd); - Assert(returnValue != -1); + if (close(vfdP->fd)) + elog(DEBUG, "FileClose: failed to close %s: %m", + vfdP->fileName); --nfile; - VfdCache[file].fd = VFD_CLOSED; + vfdP->fd = VFD_CLOSED; } /* * Delete the file if it was temporary */ - if (VfdCache[file].fdstate & FD_TEMPORARY) + if (vfdP->fdstate & FD_TEMPORARY) { /* reset flag so that die() interrupt won't cause problems */ - VfdCache[file].fdstate &= ~FD_TEMPORARY; - unlink(VfdCache[file].fileName); + vfdP->fdstate &= ~FD_TEMPORARY; + if (unlink(vfdP->fileName)) + elog(DEBUG, "FileClose: failed to unlink %s: %m", + vfdP->fileName); } /*