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

Commite93b629

Browse files
committed
Remove volatile qualifiers from bufmgr.c and freelist.c
Prior to commit0709b7e, access tovariables within a spinlock-protected critical section had to be donethrough a volatile pointer, but that should no longer be necessary.Review by Andres Freund
1 parent8004953 commite93b629

File tree

3 files changed

+59
-65
lines changed

3 files changed

+59
-65
lines changed

‎src/backend/storage/buffer/bufmgr.c

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ inteffective_io_concurrency = 0;
9292
inttarget_prefetch_pages=0;
9393

9494
/* local state for StartBufferIO and related functions */
95-
staticvolatileBufferDesc*InProgressBuf=NULL;
95+
staticBufferDesc*InProgressBuf=NULL;
9696
staticboolIsForInput;
9797

9898
/* local state for LockBufferForCleanup */
99-
staticvolatileBufferDesc*PinCountWaitBuf=NULL;
99+
staticBufferDesc*PinCountWaitBuf=NULL;
100100

101101
/*
102102
* Backend-Private refcount management:
@@ -395,24 +395,24 @@ static Buffer ReadBuffer_common(SMgrRelation reln, char relpersistence,
395395
ForkNumberforkNum,BlockNumberblockNum,
396396
ReadBufferModemode,BufferAccessStrategystrategy,
397397
bool*hit);
398-
staticboolPinBuffer(volatileBufferDesc*buf,BufferAccessStrategystrategy);
399-
staticvoidPinBuffer_Locked(volatileBufferDesc*buf);
400-
staticvoidUnpinBuffer(volatileBufferDesc*buf,boolfixOwner);
398+
staticboolPinBuffer(BufferDesc*buf,BufferAccessStrategystrategy);
399+
staticvoidPinBuffer_Locked(BufferDesc*buf);
400+
staticvoidUnpinBuffer(BufferDesc*buf,boolfixOwner);
401401
staticvoidBufferSync(intflags);
402402
staticintSyncOneBuffer(intbuf_id,boolskip_recently_used);
403-
staticvoidWaitIO(volatileBufferDesc*buf);
404-
staticboolStartBufferIO(volatileBufferDesc*buf,boolforInput);
405-
staticvoidTerminateBufferIO(volatileBufferDesc*buf,boolclear_dirty,
403+
staticvoidWaitIO(BufferDesc*buf);
404+
staticboolStartBufferIO(BufferDesc*buf,boolforInput);
405+
staticvoidTerminateBufferIO(BufferDesc*buf,boolclear_dirty,
406406
intset_flag_bits);
407407
staticvoidshared_buffer_write_error_callback(void*arg);
408408
staticvoidlocal_buffer_write_error_callback(void*arg);
409-
staticvolatileBufferDesc*BufferAlloc(SMgrRelationsmgr,
409+
staticBufferDesc*BufferAlloc(SMgrRelationsmgr,
410410
charrelpersistence,
411411
ForkNumberforkNum,
412412
BlockNumberblockNum,
413413
BufferAccessStrategystrategy,
414414
bool*foundPtr);
415-
staticvoidFlushBuffer(volatileBufferDesc*buf,SMgrRelationreln);
415+
staticvoidFlushBuffer(BufferDesc*buf,SMgrRelationreln);
416416
staticvoidAtProcExit_Buffers(intcode,Datumarg);
417417
staticvoidCheckForBufferLeaks(void);
418418
staticintrnode_comparator(constvoid*p1,constvoid*p2);
@@ -663,7 +663,7 @@ ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
663663
BlockNumberblockNum,ReadBufferModemode,
664664
BufferAccessStrategystrategy,bool*hit)
665665
{
666-
volatileBufferDesc*bufHdr;
666+
BufferDesc*bufHdr;
667667
BlockbufBlock;
668668
boolfound;
669669
boolisExtend;
@@ -927,7 +927,7 @@ ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
927927
*
928928
* No locks are held either at entry or exit.
929929
*/
930-
staticvolatileBufferDesc*
930+
staticBufferDesc*
931931
BufferAlloc(SMgrRelationsmgr,charrelpersistence,ForkNumberforkNum,
932932
BlockNumberblockNum,
933933
BufferAccessStrategystrategy,
@@ -941,7 +941,7 @@ BufferAlloc(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
941941
LWLock*oldPartitionLock;/* buffer partition lock for it */
942942
BufFlagsoldFlags;
943943
intbuf_id;
944-
volatileBufferDesc*buf;
944+
BufferDesc*buf;
945945
boolvalid;
946946

947947
/* create a tag so we can lookup the buffer */
@@ -1281,7 +1281,7 @@ BufferAlloc(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
12811281
* to acquire the necessary locks; if so, don't mess it up.
12821282
*/
12831283
staticvoid
1284-
InvalidateBuffer(volatileBufferDesc*buf)
1284+
InvalidateBuffer(BufferDesc*buf)
12851285
{
12861286
BufferTagoldTag;
12871287
uint32oldHash;/* hash value for oldTag */
@@ -1380,7 +1380,7 @@ InvalidateBuffer(volatile BufferDesc *buf)
13801380
void
13811381
MarkBufferDirty(Bufferbuffer)
13821382
{
1383-
volatileBufferDesc*bufHdr;
1383+
BufferDesc*bufHdr;
13841384

13851385
if (!BufferIsValid(buffer))
13861386
elog(ERROR,"bad buffer ID: %d",buffer);
@@ -1436,7 +1436,7 @@ ReleaseAndReadBuffer(Buffer buffer,
14361436
BlockNumberblockNum)
14371437
{
14381438
ForkNumberforkNum=MAIN_FORKNUM;
1439-
volatileBufferDesc*bufHdr;
1439+
BufferDesc*bufHdr;
14401440

14411441
if (BufferIsValid(buffer))
14421442
{
@@ -1485,7 +1485,7 @@ ReleaseAndReadBuffer(Buffer buffer,
14851485
* some callers to avoid an extra spinlock cycle.
14861486
*/
14871487
staticbool
1488-
PinBuffer(volatileBufferDesc*buf,BufferAccessStrategystrategy)
1488+
PinBuffer(BufferDesc*buf,BufferAccessStrategystrategy)
14891489
{
14901490
Bufferb=BufferDescriptorGetBuffer(buf);
14911491
boolresult;
@@ -1547,7 +1547,7 @@ PinBuffer(volatile BufferDesc *buf, BufferAccessStrategy strategy)
15471547
* its state can change under us.
15481548
*/
15491549
staticvoid
1550-
PinBuffer_Locked(volatileBufferDesc*buf)
1550+
PinBuffer_Locked(BufferDesc*buf)
15511551
{
15521552
Bufferb;
15531553
PrivateRefCountEntry*ref;
@@ -1578,7 +1578,7 @@ PinBuffer_Locked(volatile BufferDesc *buf)
15781578
* Those that don't should pass fixOwner = FALSE.
15791579
*/
15801580
staticvoid
1581-
UnpinBuffer(volatileBufferDesc*buf,boolfixOwner)
1581+
UnpinBuffer(BufferDesc*buf,boolfixOwner)
15821582
{
15831583
PrivateRefCountEntry*ref;
15841584
Bufferb=BufferDescriptorGetBuffer(buf);
@@ -1672,7 +1672,7 @@ BufferSync(int flags)
16721672
num_to_write=0;
16731673
for (buf_id=0;buf_id<NBuffers;buf_id++)
16741674
{
1675-
volatileBufferDesc*bufHdr=GetBufferDescriptor(buf_id);
1675+
BufferDesc*bufHdr=GetBufferDescriptor(buf_id);
16761676

16771677
/*
16781678
* Header spinlock is enough to examine BM_DIRTY, see comment in
@@ -1707,7 +1707,7 @@ BufferSync(int flags)
17071707
num_written=0;
17081708
while (num_to_scan-->0)
17091709
{
1710-
volatileBufferDesc*bufHdr=GetBufferDescriptor(buf_id);
1710+
BufferDesc*bufHdr=GetBufferDescriptor(buf_id);
17111711

17121712
/*
17131713
* We don't need to acquire the lock here, because we're only looking
@@ -2079,7 +2079,7 @@ BgBufferSync(void)
20792079
staticint
20802080
SyncOneBuffer(intbuf_id,boolskip_recently_used)
20812081
{
2082-
volatileBufferDesc*bufHdr=GetBufferDescriptor(buf_id);
2082+
BufferDesc*bufHdr=GetBufferDescriptor(buf_id);
20832083
intresult=0;
20842084

20852085
ReservePrivateRefCountEntry();
@@ -2252,7 +2252,7 @@ CheckForBufferLeaks(void)
22522252
void
22532253
PrintBufferLeakWarning(Bufferbuffer)
22542254
{
2255-
volatileBufferDesc*buf;
2255+
BufferDesc*buf;
22562256
int32loccount;
22572257
char*path;
22582258
BackendIdbackend;
@@ -2324,7 +2324,7 @@ BufmgrCommit(void)
23242324
BlockNumber
23252325
BufferGetBlockNumber(Bufferbuffer)
23262326
{
2327-
volatileBufferDesc*bufHdr;
2327+
BufferDesc*bufHdr;
23282328

23292329
Assert(BufferIsPinned(buffer));
23302330

@@ -2346,7 +2346,7 @@ void
23462346
BufferGetTag(Bufferbuffer,RelFileNode*rnode,ForkNumber*forknum,
23472347
BlockNumber*blknum)
23482348
{
2349-
volatileBufferDesc*bufHdr;
2349+
BufferDesc*bufHdr;
23502350

23512351
/* Do the same checks as BufferGetBlockNumber. */
23522352
Assert(BufferIsPinned(buffer));
@@ -2382,7 +2382,7 @@ BufferGetTag(Buffer buffer, RelFileNode *rnode, ForkNumber *forknum,
23822382
* as the second parameter. If not, pass NULL.
23832383
*/
23842384
staticvoid
2385-
FlushBuffer(volatileBufferDesc*buf,SMgrRelationreln)
2385+
FlushBuffer(BufferDesc*buf,SMgrRelationreln)
23862386
{
23872387
XLogRecPtrrecptr;
23882388
ErrorContextCallbackerrcallback;
@@ -2520,7 +2520,7 @@ RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum)
25202520
bool
25212521
BufferIsPermanent(Bufferbuffer)
25222522
{
2523-
volatileBufferDesc*bufHdr;
2523+
BufferDesc*bufHdr;
25242524

25252525
/* Local buffers are used only for temp relations. */
25262526
if (BufferIsLocal(buffer))
@@ -2550,7 +2550,7 @@ BufferIsPermanent(Buffer buffer)
25502550
XLogRecPtr
25512551
BufferGetLSNAtomic(Bufferbuffer)
25522552
{
2553-
volatileBufferDesc*bufHdr=GetBufferDescriptor(buffer-1);
2553+
BufferDesc*bufHdr=GetBufferDescriptor(buffer-1);
25542554
char*page=BufferGetPage(buffer);
25552555
XLogRecPtrlsn;
25562556

@@ -2613,7 +2613,7 @@ DropRelFileNodeBuffers(RelFileNodeBackend rnode, ForkNumber forkNum,
26132613

26142614
for (i=0;i<NBuffers;i++)
26152615
{
2616-
volatileBufferDesc*bufHdr=GetBufferDescriptor(i);
2616+
BufferDesc*bufHdr=GetBufferDescriptor(i);
26172617

26182618
/*
26192619
* We can make this a tad faster by prechecking the buffer tag before
@@ -2703,7 +2703,7 @@ DropRelFileNodesAllBuffers(RelFileNodeBackend *rnodes, int nnodes)
27032703
for (i=0;i<NBuffers;i++)
27042704
{
27052705
RelFileNode*rnode=NULL;
2706-
volatileBufferDesc*bufHdr=GetBufferDescriptor(i);
2706+
BufferDesc*bufHdr=GetBufferDescriptor(i);
27072707

27082708
/*
27092709
* As in DropRelFileNodeBuffers, an unlocked precheck should be safe
@@ -2767,7 +2767,7 @@ DropDatabaseBuffers(Oid dbid)
27672767

27682768
for (i=0;i<NBuffers;i++)
27692769
{
2770-
volatileBufferDesc*bufHdr=GetBufferDescriptor(i);
2770+
BufferDesc*bufHdr=GetBufferDescriptor(i);
27712771

27722772
/*
27732773
* As in DropRelFileNodeBuffers, an unlocked precheck should be safe
@@ -2799,7 +2799,7 @@ PrintBufferDescs(void)
27992799

28002800
for (i=0;i<NBuffers;++i)
28012801
{
2802-
volatileBufferDesc*buf=GetBufferDescriptor(i);
2802+
BufferDesc*buf=GetBufferDescriptor(i);
28032803
Bufferb=BufferDescriptorGetBuffer(buf);
28042804

28052805
/* theoretically we should lock the bufhdr here */
@@ -2822,7 +2822,7 @@ PrintPinnedBufs(void)
28222822

28232823
for (i=0;i<NBuffers;++i)
28242824
{
2825-
volatileBufferDesc*buf=GetBufferDescriptor(i);
2825+
BufferDesc*buf=GetBufferDescriptor(i);
28262826
Bufferb=BufferDescriptorGetBuffer(buf);
28272827

28282828
if (GetPrivateRefCount(b)>0)
@@ -2863,7 +2863,7 @@ void
28632863
FlushRelationBuffers(Relationrel)
28642864
{
28652865
inti;
2866-
volatileBufferDesc*bufHdr;
2866+
BufferDesc*bufHdr;
28672867

28682868
/* Open rel at the smgr level if not already done */
28692869
RelationOpenSmgr(rel);
@@ -2955,7 +2955,7 @@ void
29552955
FlushDatabaseBuffers(Oiddbid)
29562956
{
29572957
inti;
2958-
volatileBufferDesc*bufHdr;
2958+
BufferDesc*bufHdr;
29592959

29602960
/* Make sure we can handle the pin inside the loop */
29612961
ResourceOwnerEnlargeBuffers(CurrentResourceOwner);
@@ -3064,7 +3064,7 @@ IncrBufferRefCount(Buffer buffer)
30643064
void
30653065
MarkBufferDirtyHint(Bufferbuffer,boolbuffer_std)
30663066
{
3067-
volatileBufferDesc*bufHdr;
3067+
BufferDesc*bufHdr;
30683068
Pagepage=BufferGetPage(buffer);
30693069

30703070
if (!BufferIsValid(buffer))
@@ -3198,7 +3198,7 @@ MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
31983198
void
31993199
UnlockBuffers(void)
32003200
{
3201-
volatileBufferDesc*buf=PinCountWaitBuf;
3201+
BufferDesc*buf=PinCountWaitBuf;
32023202

32033203
if (buf)
32043204
{
@@ -3224,7 +3224,7 @@ UnlockBuffers(void)
32243224
void
32253225
LockBuffer(Bufferbuffer,intmode)
32263226
{
3227-
volatileBufferDesc*buf;
3227+
BufferDesc*buf;
32283228

32293229
Assert(BufferIsValid(buffer));
32303230
if (BufferIsLocal(buffer))
@@ -3250,7 +3250,7 @@ LockBuffer(Buffer buffer, int mode)
32503250
bool
32513251
ConditionalLockBuffer(Bufferbuffer)
32523252
{
3253-
volatileBufferDesc*buf;
3253+
BufferDesc*buf;
32543254

32553255
Assert(BufferIsValid(buffer));
32563256
if (BufferIsLocal(buffer))
@@ -3280,7 +3280,7 @@ ConditionalLockBuffer(Buffer buffer)
32803280
void
32813281
LockBufferForCleanup(Bufferbuffer)
32823282
{
3283-
volatileBufferDesc*bufHdr;
3283+
BufferDesc*bufHdr;
32843284

32853285
Assert(BufferIsValid(buffer));
32863286
Assert(PinCountWaitBuf==NULL);
@@ -3392,7 +3392,7 @@ HoldingBufferPinThatDelaysRecovery(void)
33923392
bool
33933393
ConditionalLockBufferForCleanup(Bufferbuffer)
33943394
{
3395-
volatileBufferDesc*bufHdr;
3395+
BufferDesc*bufHdr;
33963396

33973397
Assert(BufferIsValid(buffer));
33983398

@@ -3445,7 +3445,7 @@ ConditionalLockBufferForCleanup(Buffer buffer)
34453445
* WaitIO -- Block until the IO_IN_PROGRESS flag on 'buf' is cleared.
34463446
*/
34473447
staticvoid
3448-
WaitIO(volatileBufferDesc*buf)
3448+
WaitIO(BufferDesc*buf)
34493449
{
34503450
/*
34513451
* Changed to wait until there's no IO - Inoue 01/13/2000
@@ -3492,7 +3492,7 @@ WaitIO(volatile BufferDesc *buf)
34923492
* FALSE if someone else already did the work.
34933493
*/
34943494
staticbool
3495-
StartBufferIO(volatileBufferDesc*buf,boolforInput)
3495+
StartBufferIO(BufferDesc*buf,boolforInput)
34963496
{
34973497
Assert(!InProgressBuf);
34983498

@@ -3558,8 +3558,7 @@ StartBufferIO(volatile BufferDesc *buf, bool forInput)
35583558
* be 0, or BM_VALID if we just finished reading in the page.
35593559
*/
35603560
staticvoid
3561-
TerminateBufferIO(volatileBufferDesc*buf,boolclear_dirty,
3562-
intset_flag_bits)
3561+
TerminateBufferIO(BufferDesc*buf,boolclear_dirty,intset_flag_bits)
35633562
{
35643563
Assert(buf==InProgressBuf);
35653564

@@ -3590,7 +3589,7 @@ TerminateBufferIO(volatile BufferDesc *buf, bool clear_dirty,
35903589
void
35913590
AbortBufferIO(void)
35923591
{
3593-
volatileBufferDesc*buf=InProgressBuf;
3592+
BufferDesc*buf=InProgressBuf;
35943593

35953594
if (buf)
35963595
{
@@ -3643,7 +3642,7 @@ AbortBufferIO(void)
36433642
staticvoid
36443643
shared_buffer_write_error_callback(void*arg)
36453644
{
3646-
volatileBufferDesc*bufHdr= (volatileBufferDesc*)arg;
3645+
BufferDesc*bufHdr= (BufferDesc*)arg;
36473646

36483647
/* Buffer is pinned, so we can read the tag without locking the spinlock */
36493648
if (bufHdr!=NULL)
@@ -3662,7 +3661,7 @@ shared_buffer_write_error_callback(void *arg)
36623661
staticvoid
36633662
local_buffer_write_error_callback(void*arg)
36643663
{
3665-
volatileBufferDesc*bufHdr= (volatileBufferDesc*)arg;
3664+
BufferDesc*bufHdr= (BufferDesc*)arg;
36663665

36673666
if (bufHdr!=NULL)
36683667
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp