summaryrefslogtreecommitdiff
path: root/src/bin/pg_basebackup/walmethods.c
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2018-08-05 05:32:12 +0900
committerMichael Paquier <michael@paquier.xyz>2018-08-05 05:32:12 +0900
commit7124e64520834cd238c9f0efcfe429c28696b11d (patch)
tree1ba87fd3b130d2f5c795a28c0603644abba8df67 /src/bin/pg_basebackup/walmethods.c
parentc83408aa71e06f60c30ffda103f513b7d52db05d (diff)
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.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c
index 82cbf870025..870b6d085e8 100644
--- a/src/bin/pg_basebackup/walmethods.c
+++ b/src/bin/pg_basebackup/walmethods.c
@@ -121,6 +121,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;
@@ -444,6 +445,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)
{
/*
@@ -627,6 +629,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;
@@ -827,6 +830,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 */
@@ -899,6 +903,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 */
@@ -931,6 +936,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)
{
/*