Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9951741

Browse files
committed
Attempt to handle pending-delete files on Windows
These files are deleted but not yet gone from the filesystem. Operationson them will return ERROR_DELETE_PENDING.With this we start treating that as ENOENT, meaning files does notexist (which is the state it will soon reach). This should be safe inevery case except when we try to recreate a file with exactly the samename. This is an operation that PostgreSQL does very seldom, sohopefully that won't happen much -- and even if it does, this treatmentshould be no worse than treating it as an unhandled error.We've been un able to reproduce the bug reliably, so pushing this tomaster to get buildfarm coverage and other testing. Once it's proven tobe stable, it should be considered for backpatching.Discussion:https://postgr.es/m/20160712083220.1426.58667%40wrigleys.postgresql.orgPatch by me and Michael Paquier
1 parent9a4d510 commit9951741

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

‎src/port/dirmod.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,22 @@ pgwin32_safestat(const char *path, struct stat * buf)
372372

373373
r=stat(path,buf);
374374
if (r<0)
375+
{
376+
if (GetLastError()==ERROR_DELETE_PENDING)
377+
{
378+
/*
379+
* File has been deleted, but is not gone from the filesystem
380+
* yet. This can happen when some process with FILE_SHARE_DELETE
381+
* has it open and it will be fully removed once that handle
382+
* is closed. Meanwhile, we can't open it, so indicate that
383+
* the file just doesn't exist.
384+
*/
385+
errno=ENOENT;
386+
return-1;
387+
}
388+
375389
returnr;
390+
}
376391

377392
if (!GetFileAttributesEx(path,GetFileExInfoStandard,&attr))
378393
{

‎src/port/win32error.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ static const struct
161161
},
162162
{
163163
ERROR_NOT_ENOUGH_QUOTA,ENOMEM
164+
},
165+
{
166+
ERROR_DELETE_PENDING,ENOENT
164167
}
165168
};
166169

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp