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

Commita9d9bdd

Browse files
committed
Save errno across LWLockRelease() calls
Fixup for "Drop slot's LWLock before returning from SaveSlotToPath()"Reported-by: Michael Paquier <michael@paquier.xyz>
1 parent18d85e9 commita9d9bdd

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

‎src/backend/replication/slot.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1259,9 +1259,13 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel)
12591259
/*
12601260
* If not an ERROR, then release the lock before returning. In case
12611261
* of an ERROR, the error recovery path automatically releases the
1262-
* lock, but no harm in explicitly releasing even in that case.
1262+
* lock, but no harm in explicitly releasing even in that case. Note
1263+
* that LWLockRelease() could affect errno.
12631264
*/
1265+
intsave_errno=errno;
1266+
12641267
LWLockRelease(&slot->io_in_progress_lock);
1268+
errno=save_errno;
12651269
ereport(elevel,
12661270
(errcode_for_file_access(),
12671271
errmsg("could not create file \"%s\": %m",
@@ -1325,7 +1329,10 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel)
13251329

13261330
if (CloseTransientFile(fd)!=0)
13271331
{
1332+
intsave_errno=errno;
1333+
13281334
LWLockRelease(&slot->io_in_progress_lock);
1335+
errno=save_errno;
13291336
ereport(elevel,
13301337
(errcode_for_file_access(),
13311338
errmsg("could not close file \"%s\": %m",
@@ -1336,7 +1343,10 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel)
13361343
/* rename to permanent file, fsync file and directory */
13371344
if (rename(tmppath,path)!=0)
13381345
{
1346+
intsave_errno=errno;
1347+
13391348
LWLockRelease(&slot->io_in_progress_lock);
1349+
errno=save_errno;
13401350
ereport(elevel,
13411351
(errcode_for_file_access(),
13421352
errmsg("could not rename file \"%s\" to \"%s\": %m",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp