Claudio found that his new delete fix for Win32 also works for rename on
files open by other processes, so I have applied the following patch to
remove the special rename() handling on Win32. What it used to do was
to rename a file to a *.new, release locks, then do the rename to the
main file. WIth Claudio's fix, this isn't necessary.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Index: src/backend/commands/user.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/commands/user.c,v
retrieving revision 1.138
diff -c -c -r1.138 user.c
*** src/backend/commands/user.c 25 Feb 2004 19:41:22 -0000 1.138
--- src/backend/commands/user.c 16 Mar 2004 04:51:18 -0000
***************
*** 140,149 ****
bufsize = strlen(filename) + 12;
tempname = (char *) palloc(bufsize);
snprintf(tempname, bufsize, "%s.%d", filename, MyProcPid);
- #if defined(WIN32) || defined(__CYGWIN__)
- filename = repalloc(filename, strlen(filename) + 1 + strlen(".new"));
- strcat(filename, ".new");
- #endif
oumask = umask((mode_t) 077);
fp = AllocateFile(tempname, "w");
--- 140,145 ----
***************
*** 291,300 ****
bufsize = strlen(filename) + 12;
tempname = (char *) palloc(bufsize);
snprintf(tempname, bufsize, "%s.%d", filename, MyProcPid);
- #if defined(WIN32) || defined(__CYGWIN__)
- filename = repalloc(filename, strlen(filename) + 1 + strlen(".new"));
- strcat(filename, ".new");
- #endif
oumask = umask((mode_t) 077);
fp = AllocateFile(tempname, "w");
--- 287,292 ----
***************
*** 466,483 ****
user_file_update_needed = false;
write_user_file(urel);
heap_close(urel, NoLock);
- #if defined(WIN32) || defined(__CYGWIN__)
- {
- /* Rename active file while not holding an exclusive lock */
- char *filename = user_getfilename(), *filename_new;
-
- filename_new = palloc(strlen(filename) + 1 + strlen(".new"));
- sprintf(filename_new, "%s.new", filename);
- rename(filename_new, filename);
- pfree(filename);
- pfree(filename_new);
- }
- #endif
}
if (group_file_update_needed)
--- 458,463 ----
***************
*** 485,502 ****
group_file_update_needed = false;
write_group_file(grel);
heap_close(grel, NoLock);
- #if defined(WIN32) || defined(__CYGWIN__)
- {
- /* Rename active file while not holding an exclusive lock */
- char *filename = group_getfilename(), *filename_new;
-
- filename_new = palloc(strlen(filename) + 1 + strlen(".new"));
- sprintf(filename_new, "%s.new", filename);
- rename(filename_new, filename);
- pfree(filename);
- pfree(filename_new);
- }
- #endif
}
/*
--- 465,470 ----
Index: src/backend/utils/cache/relcache.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/cache/relcache.c,v
retrieving revision 1.199
diff -c -c -r1.199 relcache.c
*** src/backend/utils/cache/relcache.c 14 Mar 2004 23:41:27 -0000 1.199
--- src/backend/utils/cache/relcache.c 16 Mar 2004 04:51:25 -0000
***************
*** 3278,3297 ****
* OK, rename the temp file to its final name, deleting any
* previously-existing init file.
*/
- #if defined(WIN32) || defined(__CYGWIN__)
rename(tempfilename, finalfilename);
LWLockRelease(RelCacheInitLock);
- #else
- {
- char finalfilename_new[MAXPGPATH];
-
- snprintf(finalfilename_new, sizeof(finalfilename_new), "%s.new", finalfilename);
- rename(tempfilename, finalfilename_new);
- LWLockRelease(RelCacheInitLock);
- /* Rename to active file after lock is released */
- rename(finalfilename_new, finalfilename);
- }
- #endif
}
else
{
--- 3278,3285 ----