diff options
author | Michael Paquier <michael@paquier.xyz> | 2019-04-17 09:51:45 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2019-04-17 09:51:45 +0900 |
commit | 47ac2033d460cefbbda2e39732e18de521dc6a36 (patch) | |
tree | 6105936878e0017f42fa515674f50dceae7dc57c /src/backend/access | |
parent | a6dcf9df4d91ff0db23579f9114079abe6f3e2bf (diff) | |
download | postgresql-47ac2033d460cefbbda2e39732e18de521dc6a36.tar.gz postgresql-47ac2033d460cefbbda2e39732e18de521dc6a36.zip |
Simplify some ERROR paths clearing wait events and transient files
Transient files and wait events get normally cleaned up when seeing an
exception (be it in the context of a transaction for a backend or
another process like the checkpointer), hence there is little point in
complicating error code paths to do this work. This shaves a bit of
code, and removes some extra handling with errno which needed to be
preserved during the cleanup steps done.
Reported-by: Masahiko Sawada
Author: Michael Paquier
Reviewed-by: Tom Lane, Masahiko Sawada
Discussion: https://postgr.es/m/CAD21AoDhHYVq5KkXfkaHhmjA-zJYj-e4teiRAJefvXuKJz1tKQ@mail.gmail.com
Diffstat (limited to 'src/backend/access')
-rw-r--r-- | src/backend/access/transam/twophase.c | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index f9a4960f8ae..a399c0052d9 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1693,26 +1693,18 @@ RecreateTwoPhaseFile(TransactionId xid, void *content, int len) pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_WRITE); if (write(fd, content, len) != len) { - int save_errno = errno; - - pgstat_report_wait_end(); - CloseTransientFile(fd); - /* if write didn't set errno, assume problem is no disk space */ - errno = save_errno ? save_errno : ENOSPC; + if (errno == 0) + errno = ENOSPC; ereport(ERROR, (errcode_for_file_access(), errmsg("could not write file \"%s\": %m", path))); } if (write(fd, &statefile_crc, sizeof(pg_crc32c)) != sizeof(pg_crc32c)) { - int save_errno = errno; - - pgstat_report_wait_end(); - CloseTransientFile(fd); - /* if write didn't set errno, assume problem is no disk space */ - errno = save_errno ? save_errno : ENOSPC; + if (errno == 0) + errno = ENOSPC; ereport(ERROR, (errcode_for_file_access(), errmsg("could not write file \"%s\": %m", path))); @@ -1725,15 +1717,9 @@ RecreateTwoPhaseFile(TransactionId xid, void *content, int len) */ pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_SYNC); if (pg_fsync(fd) != 0) - { - int save_errno = errno; - - CloseTransientFile(fd); - errno = save_errno; ereport(ERROR, (errcode_for_file_access(), errmsg("could not fsync file \"%s\": %m", path))); - } pgstat_report_wait_end(); if (CloseTransientFile(fd) != 0) |