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

Commit54ce23d

Browse files
committed
Add memory barrier
1 parent4a8146b commit54ce23d

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

‎src/backend/storage/file/cfs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,7 @@ static bool cfs_gc_file(char* map_path, bool background)
986986
else
987987
remove_backups= true;/* we don't need backups anymore */
988988

989+
pg_write_barrier();
989990
pg_atomic_fetch_sub_u32(&map->lock,CFS_GC_LOCK);/* release lock */
990991

991992
/* remove map backup file */

‎src/backend/storage/file/fd.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1708,12 +1708,16 @@ static bool
17081708
FileLock(Filefile)
17091709
{
17101710
Vfd*vfdP=&VfdCache[file];
1711+
uint64map_generation;
17111712

17121713
/* protect file from GC */
17131714
cfs_lock_file(vfdP->map,vfdP->fileName);
17141715

1716+
map_generation=vfdP->map->generation;
1717+
pg_read_barrier();
1718+
17151719
/* Reopen file, because it was rewritten by gc */
1716-
if (vfdP->generation!=vfdP->map->generation)
1720+
if (vfdP->generation!=map_generation)
17171721
{
17181722
close(vfdP->fd);
17191723
vfdP->fd=BasicOpenFile(vfdP->fileName,vfdP->fileFlags,vfdP->fileMode);
@@ -1722,7 +1726,7 @@ FileLock(File file)
17221726
DO_DB(elog(LOG,"RE_OPEN FAILED: %d",errno));
17231727
return false;
17241728
}
1725-
vfdP->generation=vfdP->map->generation;
1729+
vfdP->generation=map_generation;
17261730
}
17271731
return true;
17281732
}
@@ -2005,6 +2009,8 @@ FileWrite(File file, char *buffer, int amount)
20052009
errno=0;
20062010
returnCode=write(vfdP->fd,buffer,amount);
20072011

2012+
Assert(vfdP->generation=vfdP->map->generation);
2013+
20082014
/* if write didn't set errno, assume problem is no disk space */
20092015
if (returnCode!=amount&&errno==0)
20102016
errno=ENOSPC;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp