diff options
author | Michael Paquier <michael@paquier.xyz> | 2018-08-05 05:31:18 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2018-08-05 05:31:18 +0900 |
commit | 5a23c74b63ec9f63c648f79b13a900c37332ee55 (patch) | |
tree | 3d8c59682c7f4d43a57ad29c2712c285532002c7 /src/bin/pg_basebackup/walmethods.c | |
parent | e61f21b921aebc0870d3ac47f77fc17e75e2fefb (diff) | |
download | postgresql-5a23c74b63ec9f63c648f79b13a900c37332ee55.tar.gz postgresql-5a23c74b63ec9f63c648f79b13a900c37332ee55.zip |
Reset properly errno before calling write()
6cb3372 enforces errno to ENOSPC when less bytes than what is expected
have been written when it is unset, though it forgot to properly reset
errno before doing a system call to write(), causing errno to
potentially come from a previous system call.
Reported-by: Tom Lane
Author: Michael Paquier
Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/31797.1533326676@sss.pgh.pa.us
Diffstat (limited to 'src/bin/pg_basebackup/walmethods.c')
-rw-r--r-- | src/bin/pg_basebackup/walmethods.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index fbfee05a5a6..42e3f3023a0 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -122,6 +122,7 @@ dir_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_ zerobuf = pg_malloc0(XLOG_BLCKSZ); for (bytes = 0; bytes < pad_to_size; bytes += XLOG_BLCKSZ) { + errno = 0; if (write(fd, zerobuf, XLOG_BLCKSZ) != XLOG_BLCKSZ) { int save_errno = errno; @@ -445,6 +446,7 @@ tar_write_compressed_data(void *buf, size_t count, bool flush) { size_t len = ZLIB_OUT_SIZE - tar_data->zp->avail_out; + errno = 0; if (write(tar_data->fd, tar_data->zlibOut, len) != len) { /* @@ -629,6 +631,7 @@ tar_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_ if (!tar_data->compression) { + errno = 0; if (write(tar_data->fd, tar_data->currentfile->header, 512) != 512) { save_errno = errno; @@ -829,6 +832,7 @@ tar_close(Walfile f, WalCloseMethod method) return -1; if (!tar_data->compression) { + errno = 0; if (write(tar_data->fd, tf->header, 512) != 512) { /* if write didn't set errno, assume problem is no disk space */ @@ -901,6 +905,7 @@ tar_finish(void) MemSet(zerobuf, 0, sizeof(zerobuf)); if (!tar_data->compression) { + errno = 0; if (write(tar_data->fd, zerobuf, sizeof(zerobuf)) != sizeof(zerobuf)) { /* if write didn't set errno, assume problem is no disk space */ @@ -933,6 +938,7 @@ tar_finish(void) { size_t len = ZLIB_OUT_SIZE - tar_data->zp->avail_out; + errno = 0; if (write(tar_data->fd, tar_data->zlibOut, len) != len) { /* |