diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index c31a523857..78c7d41ac4 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -128,9 +128,15 @@ int max_safe_fds = 32; /* default if not changed */ /* Debugging.... */ #ifdef FDDEBUG -#define DO_DB(A) A +#define DO_DB(A) \ + do { \ + int _do_db_save_errno = errno; \ + A; \ + errno = _do_db_save_errno; \ + } while (0) #else -#define DO_DB(A) /* A */ +#define DO_DB(A) \ + ((void) 0) #endif #define VFD_CLOSED (-1) @@ -703,7 +709,7 @@ LruInsert(File file) if (vfdP->fd < 0) { DO_DB(elog(LOG, "RE_OPEN FAILED: %d", errno)); - return vfdP->fd; + return -1; } else { @@ -754,7 +760,7 @@ AllocateVfd(void) Index i; File file; - DO_DB(elog(LOG, "AllocateVfd. Size %lu", SizeVfdCache)); + DO_DB(elog(LOG, "AllocateVfd. Size %lu", (unsigned long) SizeVfdCache)); Assert(SizeVfdCache > 0); /* InitFileAccess not called? */ @@ -911,8 +917,11 @@ PathNameOpenFile(FileName fileName, int fileFlags, int fileMode) if (vfdP->fd < 0) { + int save_errno = errno; + FreeVfd(file); free(fnamecopy); + errno = save_errno; return -1; } ++nfile; @@ -1554,7 +1563,6 @@ OpenTransientFile(FileName fileName, int fileFlags, int fileMode) { int fd; - DO_DB(elog(LOG, "OpenTransientFile: Allocated %d (%s)", numAllocatedDescs, fileName));