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

Commit7124e64

Browse files
committed
Reset properly errno before calling write()
6cb3372 enforces errno to ENOSPC when less bytes than what is expectedhave been written when it is unset, though it forgot to properly reseterrno before doing a system call to write(), causing errno topotentially come from a previous system call.Reported-by: Tom LaneAuthor: Michael PaquierReviewed-by: Tom LaneDiscussion:https://postgr.es/m/31797.1533326676@sss.pgh.pa.us
1 parentc83408a commit7124e64

File tree

7 files changed

+14
-0
lines changed

7 files changed

+14
-0
lines changed

‎src/backend/access/heap/rewriteheap.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,6 +1167,7 @@ heap_xlog_logical_rewrite(XLogReaderState *r)
11671167
len=xlrec->num_mappings*sizeof(LogicalRewriteMappingData);
11681168

11691169
/* write out tail end of mapping file (again) */
1170+
errno=0;
11701171
pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE);
11711172
if (write(fd,data,len)!=len)
11721173
{

‎src/backend/access/transam/twophase.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1599,6 +1599,7 @@ RecreateTwoPhaseFile(TransactionId xid, void *content, int len)
15991599
path)));
16001600

16011601
/* Write content and CRC */
1602+
errno=0;
16021603
pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_WRITE);
16031604
if (write(fd,content,len)!=len)
16041605
{

‎src/backend/replication/logical/origin.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,7 @@ CheckPointReplicationOrigin(void)
577577
tmppath)));
578578

579579
/* write magic */
580+
errno=0;
580581
if ((write(tmpfd,&magic,sizeof(magic)))!=sizeof(magic))
581582
{
582583
intsave_errno=errno;
@@ -620,6 +621,7 @@ CheckPointReplicationOrigin(void)
620621
/* make sure we only write out a commit that's persistent */
621622
XLogFlush(local_lsn);
622623

624+
errno=0;
623625
if ((write(tmpfd,&disk_state,sizeof(disk_state)))!=
624626
sizeof(disk_state))
625627
{
@@ -642,6 +644,7 @@ CheckPointReplicationOrigin(void)
642644

643645
/* write out the CRC */
644646
FIN_CRC32C(crc);
647+
errno=0;
645648
if ((write(tmpfd,&crc,sizeof(crc)))!=sizeof(crc))
646649
{
647650
intsave_errno=errno;

‎src/backend/replication/logical/reorderbuffer.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2426,6 +2426,7 @@ ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
24262426

24272427
ondisk->size=sz;
24282428

2429+
errno=0;
24292430
pgstat_report_wait_start(WAIT_EVENT_REORDER_BUFFER_WRITE);
24302431
if (write(fd,rb->outbuf,ondisk->size)!=ondisk->size)
24312432
{

‎src/backend/replication/logical/snapbuild.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,6 +1610,7 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
16101610
ereport(ERROR,
16111611
(errmsg("could not open file \"%s\": %m",path)));
16121612

1613+
errno=0;
16131614
pgstat_report_wait_start(WAIT_EVENT_SNAPBUILD_WRITE);
16141615
if ((write(fd,ondisk,needed_length))!=needed_length)
16151616
{

‎src/backend/replication/slot.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,6 +1269,7 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel)
12691269
SnapBuildOnDiskChecksummedSize);
12701270
FIN_CRC32C(cp.checksum);
12711271

1272+
errno=0;
12721273
pgstat_report_wait_start(WAIT_EVENT_REPLICATION_SLOT_WRITE);
12731274
if ((write(fd,&cp,sizeof(cp)))!=sizeof(cp))
12741275
{

‎src/bin/pg_basebackup/walmethods.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ dir_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_
121121
zerobuf=pg_malloc0(XLOG_BLCKSZ);
122122
for (bytes=0;bytes<pad_to_size;bytes+=XLOG_BLCKSZ)
123123
{
124+
errno=0;
124125
if (write(fd,zerobuf,XLOG_BLCKSZ)!=XLOG_BLCKSZ)
125126
{
126127
intsave_errno=errno;
@@ -444,6 +445,7 @@ tar_write_compressed_data(void *buf, size_t count, bool flush)
444445
{
445446
size_tlen=ZLIB_OUT_SIZE-tar_data->zp->avail_out;
446447

448+
errno=0;
447449
if (write(tar_data->fd,tar_data->zlibOut,len)!=len)
448450
{
449451
/*
@@ -627,6 +629,7 @@ tar_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_
627629

628630
if (!tar_data->compression)
629631
{
632+
errno=0;
630633
if (write(tar_data->fd,tar_data->currentfile->header,512)!=512)
631634
{
632635
save_errno=errno;
@@ -827,6 +830,7 @@ tar_close(Walfile f, WalCloseMethod method)
827830
return-1;
828831
if (!tar_data->compression)
829832
{
833+
errno=0;
830834
if (write(tar_data->fd,tf->header,512)!=512)
831835
{
832836
/* if write didn't set errno, assume problem is no disk space */
@@ -899,6 +903,7 @@ tar_finish(void)
899903
MemSet(zerobuf,0,sizeof(zerobuf));
900904
if (!tar_data->compression)
901905
{
906+
errno=0;
902907
if (write(tar_data->fd,zerobuf,sizeof(zerobuf))!=sizeof(zerobuf))
903908
{
904909
/* if write didn't set errno, assume problem is no disk space */
@@ -931,6 +936,7 @@ tar_finish(void)
931936
{
932937
size_tlen=ZLIB_OUT_SIZE-tar_data->zp->avail_out;
933938

939+
errno=0;
934940
if (write(tar_data->fd,tar_data->zlibOut,len)!=len)
935941
{
936942
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp