diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 4510ef32cbda5fa0181d0d26464f8ef383e8cef5..b858cfc2610d873f92a2ba9be9e756ab72c9c457 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -109,9 +109,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) @@ -674,7 +680,7 @@ LruInsert(File file) if (vfdP->fd < 0) { DO_DB(elog(LOG, "RE_OPEN FAILED: %d", errno)); - return vfdP->fd; + return -1; } else { @@ -725,7 +731,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? */ @@ -882,8 +888,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;