Skip to content

Commit f7c19e8

Browse files
author
MarcoFalke
committed
Merge #19320: wallet: Replace CDataStream& with CDataStream&& where appropriate
fa8a341 wallet: Replace CDataStream& with CDataStream&& where appropriate (MarcoFalke) fa021e9 wallet: Remove confusing double return value ret+success (MarcoFalke) Pull request description: The keys and values are only to be used once because their memory is set to zero. Make that explicit by moving the bytes into the lower level methods. ACKs for top commit: sipa: utACK fa8a341 ryanofsky: Code review ACK fa8a341. Nice changes. Tree-SHA512: 5c0218bae0f3cd2a07346f1bbf4ad232e5dde7ef2f807d82cc6cfd208d11fe60c8b0f37e7986087b52fbfc79cdfd33c3c8a5822b3d4d9a44d1c6b09e354fc424
2 parents 9f4c0a9 + fa8a341 commit f7c19e8

File tree

2 files changed

+17
-39
lines changed

2 files changed

+17
-39
lines changed

src/wallet/bdb.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -796,15 +796,13 @@ std::string BerkeleyDatabaseVersion()
796796
return DbEnv::version(nullptr, nullptr, nullptr);
797797
}
798798

799-
bool BerkeleyBatch::ReadKey(CDataStream& key, CDataStream& value)
799+
bool BerkeleyBatch::ReadKey(CDataStream&& key, CDataStream& value)
800800
{
801801
if (!pdb)
802802
return false;
803803

804-
// Key
805804
SafeDbt datKey(key.data(), key.size());
806805

807-
// Read
808806
SafeDbt datValue;
809807
int ret = pdb->get(activeTxn, datKey, datValue, 0);
810808
if (ret == 0 && datValue.get_data() != nullptr) {
@@ -814,48 +812,41 @@ bool BerkeleyBatch::ReadKey(CDataStream& key, CDataStream& value)
814812
return false;
815813
}
816814

817-
bool BerkeleyBatch::WriteKey(CDataStream& key, CDataStream& value, bool overwrite)
815+
bool BerkeleyBatch::WriteKey(CDataStream&& key, CDataStream&& value, bool overwrite)
818816
{
819817
if (!pdb)
820818
return true;
821819
if (fReadOnly)
822820
assert(!"Write called on database in read-only mode");
823821

824-
// Key
825822
SafeDbt datKey(key.data(), key.size());
826823

827-
// Value
828824
SafeDbt datValue(value.data(), value.size());
829825

830-
// Write
831826
int ret = pdb->put(activeTxn, datKey, datValue, (overwrite ? 0 : DB_NOOVERWRITE));
832827
return (ret == 0);
833828
}
834829

835-
bool BerkeleyBatch::EraseKey(CDataStream& key)
830+
bool BerkeleyBatch::EraseKey(CDataStream&& key)
836831
{
837832
if (!pdb)
838833
return false;
839834
if (fReadOnly)
840835
assert(!"Erase called on database in read-only mode");
841836

842-
// Key
843837
SafeDbt datKey(key.data(), key.size());
844838

845-
// Erase
846839
int ret = pdb->del(activeTxn, datKey, 0);
847840
return (ret == 0 || ret == DB_NOTFOUND);
848841
}
849842

850-
bool BerkeleyBatch::HasKey(CDataStream& key)
843+
bool BerkeleyBatch::HasKey(CDataStream&& key)
851844
{
852845
if (!pdb)
853846
return false;
854847

855-
// Key
856848
SafeDbt datKey(key.data(), key.size());
857849

858-
// Exists
859850
int ret = pdb->exists(activeTxn, datKey, 0);
860851
return ret == 0;
861852
}

src/wallet/bdb.h

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,10 @@ class BerkeleyBatch
195195
};
196196

197197
private:
198-
bool ReadKey(CDataStream& key, CDataStream& value);
199-
bool WriteKey(CDataStream& key, CDataStream& value, bool overwrite=true);
200-
bool EraseKey(CDataStream& key);
201-
bool HasKey(CDataStream& key);
198+
bool ReadKey(CDataStream&& key, CDataStream& value);
199+
bool WriteKey(CDataStream&& key, CDataStream&& value, bool overwrite = true);
200+
bool EraseKey(CDataStream&& key);
201+
bool HasKey(CDataStream&& key);
202202

203203
protected:
204204
Db* pdb;
@@ -222,65 +222,52 @@ class BerkeleyBatch
222222
template <typename K, typename T>
223223
bool Read(const K& key, T& value)
224224
{
225-
// Key
226225
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
227226
ssKey.reserve(1000);
228227
ssKey << key;
229228

230229
CDataStream ssValue(SER_DISK, CLIENT_VERSION);
231-
bool success = false;
232-
bool ret = ReadKey(ssKey, ssValue);
233-
if (ret) {
234-
// Unserialize value
235-
try {
236-
ssValue >> value;
237-
success = true;
238-
} catch (const std::exception&) {
239-
// In this case success remains 'false'
240-
}
230+
if (!ReadKey(std::move(ssKey), ssValue)) return false;
231+
try {
232+
ssValue >> value;
233+
return true;
234+
} catch (const std::exception&) {
235+
return false;
241236
}
242-
return ret && success;
243237
}
244238

245239
template <typename K, typename T>
246240
bool Write(const K& key, const T& value, bool fOverwrite = true)
247241
{
248-
// Key
249242
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
250243
ssKey.reserve(1000);
251244
ssKey << key;
252245

253-
// Value
254246
CDataStream ssValue(SER_DISK, CLIENT_VERSION);
255247
ssValue.reserve(10000);
256248
ssValue << value;
257249

258-
// Write
259-
return WriteKey(ssKey, ssValue, fOverwrite);
250+
return WriteKey(std::move(ssKey), std::move(ssValue), fOverwrite);
260251
}
261252

262253
template <typename K>
263254
bool Erase(const K& key)
264255
{
265-
// Key
266256
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
267257
ssKey.reserve(1000);
268258
ssKey << key;
269259

270-
// Erase
271-
return EraseKey(ssKey);
260+
return EraseKey(std::move(ssKey));
272261
}
273262

274263
template <typename K>
275264
bool Exists(const K& key)
276265
{
277-
// Key
278266
CDataStream ssKey(SER_DISK, CLIENT_VERSION);
279267
ssKey.reserve(1000);
280268
ssKey << key;
281269

282-
// Exists
283-
return HasKey(ssKey);
270+
return HasKey(std::move(ssKey));
284271
}
285272

286273
bool StartCursor();

0 commit comments

Comments
 (0)