Skip to content

Commit 1520978

Browse files
committed
Bug#33611915 TransientPool [-Wmaybe-uninitialized] [noclose]
For TransientPool add nodiscard to get and seize functions, and make sure to always test for success on call. Change-Id: I6ed8d16dc374fbefcb90a6607de801a68cd492b6
1 parent cbbb9d3 commit 1520978

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9275,7 +9275,7 @@ void Dbacc::releaseFreeOpRec()
92759275
OperationrecPtr opPtr;
92769276
opPtr.i = cfreeopRec;
92779277
cfreeopRec = RNIL;
9278-
oprec_pool.getValidPtr(opPtr);
9278+
ndbrequire(oprec_pool.getValidPtr(opPtr));
92799279
ndbrequire(opPtr.p->m_op_bits == Operationrec::OP_INITIAL);
92809280
oprec_pool.release(opPtr);
92819281
checkPoolShrinkNeed(DBACC_OPERATION_RECORD_TRANSIENT_POOL_INDEX,

storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ void Dbtc::execCONTINUEB(Signal* signal)
485485
ApiConnectRecordPtr apiConnectptr;
486486
apiConnectptr.i = scanptr.p->scanApiRec;
487487
ndbrequire(Magic::check_ptr(scanptr.p));
488-
c_apiConnectRecordPool.getValidPtr(apiConnectptr);
488+
ndbrequire(c_apiConnectRecordPool.getValidPtr(apiConnectptr));
489489
sendDihGetNodesLab(signal, scanptr, apiConnectptr);
490490
}
491491
return;
@@ -500,7 +500,7 @@ void Dbtc::execCONTINUEB(Signal* signal)
500500
ApiConnectRecordPtr apiConnectptr;
501501
apiConnectptr.i = scanptr.p->scanApiRec;
502502
ndbrequire(Magic::check_ptr(scanptr.p));
503-
c_apiConnectRecordPool.getValidPtr(apiConnectptr);
503+
ndbrequire(c_apiConnectRecordPool.getValidPtr(apiConnectptr));
504504
sendFragScansLab(signal, scanptr, apiConnectptr);
505505
}
506506
return;
@@ -10216,7 +10216,7 @@ void Dbtc::execSCAN_HBREP(Signal* signal)
1021610216
ApiConnectRecordPtr apiConnectptr;
1021710217
apiConnectptr.i = scanptr.p->scanApiRec;
1021810218
ndbrequire(Magic::check_ptr(scanptr.p));
10219-
c_apiConnectRecordPool.getUncheckedPtrRW(apiConnectptr);
10219+
ndbrequire(c_apiConnectRecordPool.getUncheckedPtrRW(apiConnectptr));
1022010220
Uint32 compare_transid1 = apiConnectptr.p->transid[0] - signal->theData[1];
1022110221
Uint32 compare_transid2 = apiConnectptr.p->transid[1] - signal->theData[2];
1022210222
ndbrequire(Magic::check_ptr(apiConnectptr.p));
@@ -12864,8 +12864,7 @@ void Dbtc::initApiConnectFail(Signal* signal,
1286412864
else
1286512865
{
1286612866
jam();
12867-
m_commitAckMarkerPool.seize(tmp);
12868-
ndbrequire(tmp.i != RNIL);
12867+
ndbrequire(m_commitAckMarkerPool.seize(tmp));
1286912868
tmp.p->transid1 = transid1;
1287012869
tmp.p->transid2 = transid2;
1287112870
m_commitAckMarkerHash.add(tmp);
@@ -13036,8 +13035,7 @@ void Dbtc::updateApiStateFail(Signal* signal,
1303613035
{
1303713036
jam();
1303813037

13039-
m_commitAckMarkerPool.seize(tmp);
13040-
ndbrequire(tmp.i != RNIL);
13038+
ndbrequire(m_commitAckMarkerPool.seize(tmp));
1304113039

1304213040
apiConnectptr.p->commitAckMarker = tmp.i;
1304313041
tmp.p->transid1 = transid1;
@@ -17064,8 +17062,7 @@ Dbtc::execDUMP_STATE_ORD(Signal* signal)
1706417062
recordNo++;
1706517063
if (numRecords > 0)
1706617064
{
17067-
(void) tcConnectRecord.getUncheckedPtrs(&recordNo, &tc, 1);
17068-
if (recordNo != RNIL)
17065+
if (tcConnectRecord.getUncheckedPtrs(&recordNo, &tc, 1))
1706917066
{
1707017067
dumpState->args[0] = DumpStateOrd::TcDumpSetOfTcConnectRec;
1707117068
dumpState->args[1] = recordNo;
@@ -17198,8 +17195,8 @@ Dbtc::execDUMP_STATE_ORD(Signal* signal)
1719817195
}
1719917196

1720017197
numRecords--;
17201-
(void) c_apiConnectRecordPool.getUncheckedPtrs(&recordNo, &ap, 1);
17202-
if (recordNo != RNIL && numRecords > 0)
17198+
if (numRecords > 0 &&
17199+
c_apiConnectRecordPool.getUncheckedPtrs(&recordNo, &ap, 1))
1720317200
{
1720417201
dumpState->args[0] = DumpStateOrd::TcDumpSetOfApiConnectRec;
1720517202
dumpState->args[1] = recordNo;

storage/ndb/src/kernel/vm/TransientPool.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright (c) 2017, 2021, Oracle and/or its affiliates.
2+
Copyright (c) 2017, 2022, Oracle and/or its affiliates.
33
44
This program is free software; you can redistribute it and/or modify
55
it under the terms of the GNU General Public License, version 2.0,
@@ -52,9 +52,9 @@ class TransientPool
5252
#endif
5353
bool startup();
5454

55-
bool seize(Ptr<T> &p);
55+
[[nodiscard]] bool seize(Ptr<T> &p);
5656
void release(Ptr<T> p);
57-
T *getPtr(Uint32 i) const;
57+
[[nodiscard]] T *getPtr(Uint32 i) const;
5858
void getPtr(Ptr<T> &p) const;
5959
/**
6060
* getValidPtr is often called on an operation record from a thread that
@@ -100,10 +100,10 @@ class TransientPool
100100
* by a special map index that maps from a 32-bit value to a pointer to
101101
* an operation record.
102102
*/
103-
bool getValidPtr(Ptr<T> &p) const;
104-
bool getUncheckedPtrRO(Ptr<T> &p) const;
105-
bool getUncheckedPtrRW(Ptr<T> &p) const;
106-
Uint32 getUncheckedPtrs(Uint32* from, Ptr<T> ptrs[], Uint32 cnt) const;
103+
[[nodiscard]] bool getValidPtr(Ptr<T> &p) const;
104+
[[nodiscard]] bool getUncheckedPtrRO(Ptr<T> &p) const;
105+
[[nodiscard]] bool getUncheckedPtrRW(Ptr<T> &p) const;
106+
[[nodiscard]] Uint32 getUncheckedPtrs(Uint32* from, Ptr<T> ptrs[], Uint32 cnt) const;
107107

108108
Uint32 getEntrySize() const { return sizeof(Type); }
109109
Uint32 getNoOfFree() const { return SlotPool::getNoOfFree(); }

0 commit comments

Comments
 (0)