Tom Lane wrote:
> Bruce Momjian <[EMAIL PROTECTED]> writes:
> > I think we may be best just looping on MoveFileEx() until is succeeds. 
> > We do the pg_pwd writes while holding an exclusive lock on pg_shadow so
> > that will guarantee that no one else will slip an old version of the
> > file in after we have written it.  However, it also prevents pg_shadow
> > access while we are doing the looping.  Yuck.
> 
> Surely you're not evaluating this on the assumption that the pg_shadow
> triggers are the only places that use rename() ?
> 
> I see other places in pgstat and relcache that expect rename() to work
> per Unix spec.

Yes, I know there are others but I think we will need _a_ rename that
works 100% and then replace that in all Win32 rename cases.

Given what I have seen, I think a single rename with a loop that uses
MoveFileEx() may be our best bet.  It is localized, doesn't affect the
open() code, and should work well.  The only downside is that under
heavy read activity the loop will loop around a few times but I just
don't see another solution.

I was initially concerned that the loop in rename could let old renames
update the file overwriting newer contents but I realize now that
rename() itself has the same issue (an old rename could hit in the code
after a newer rename) so in all cases we must already have the proper
locking in place.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to