@@ -13,6 +13,7 @@ CSparkNameManager *CSparkNameManager::sharedSparkNameManager = new CSparkNameMan
13
13
14
14
bool CSparkNameManager::AddBlock (CBlockIndex *pindex, bool fBackupRewrittenEntries )
15
15
{
16
+ LOCK (cs_spark_name);
16
17
for (const auto &entry : pindex->removedSparkNames ) {
17
18
sparkNameAddresses.erase (entry.second .sparkAddress );
18
19
sparkNames.erase (ToUpper (entry.first ));
@@ -33,6 +34,7 @@ bool CSparkNameManager::AddBlock(CBlockIndex *pindex, bool fBackupRewrittenEntri
33
34
34
35
bool CSparkNameManager::RemoveBlock (CBlockIndex *pindex)
35
36
{
37
+ LOCK (cs_spark_name);
36
38
for (const auto &entry : pindex->addedSparkNames ) {
37
39
sparkNames.erase (ToUpper (entry.first ));
38
40
sparkNameAddresses.erase (entry.second .sparkAddress );
@@ -188,8 +190,11 @@ bool CSparkNameManager::CheckSparkNameTx(const CTransaction &tx, int nHeight, CV
188
190
fUpdateExistingRecord = true ;
189
191
}
190
192
191
- if (!fUpdateExistingRecord && sparkNameAddresses.count (sparkNameData.sparkAddress ) > 0 )
192
- return state.DoS (100 , error (" CheckSparkNameTx: spark address is already used for another name" ));
193
+ {
194
+ LOCK (cs_spark_name);
195
+ if (!fUpdateExistingRecord && sparkNameAddresses.count (sparkNameData.sparkAddress ) > 0 )
196
+ return state.DoS (100 , error (" CheckSparkNameTx: spark address is already used for another name" ));
197
+ }
193
198
194
199
// calculate the hash of the all the transaction except the spark ownership proof
195
200
CMutableTransaction txMutable (tx);
@@ -238,6 +243,7 @@ bool CSparkNameManager::CheckSparkNameTx(const CTransaction &tx, int nHeight, CV
238
243
239
244
bool CSparkNameManager::GetSparkNameByAddress (const std::string& address, std::string& name)
240
245
{
246
+ LOCK (cs_spark_name);
241
247
auto it = sparkNameAddresses.find (address);
242
248
if (it != sparkNameAddresses.end ()) {
243
249
name = sparkNames[it->second ].name ;
@@ -249,7 +255,7 @@ bool CSparkNameManager::GetSparkNameByAddress(const std::string& address, std::s
249
255
bool CSparkNameManager::ValidateSparkNameData (const CSparkNameTxData &sparkNameData, std::string &errorDescription)
250
256
{
251
257
errorDescription.clear ();
252
-
258
+ LOCK (cs_spark_name);
253
259
if (!IsSparkNameValid (sparkNameData.name ))
254
260
errorDescription = " invalid spark name" ;
255
261
@@ -344,7 +350,7 @@ std::string CSparkNameManager::ToUpper(const std::string &str)
344
350
bool CSparkNameManager::AddSparkName (const std::string &name, const std::string &address, uint32_t validityBlocks, const std::string &additionalInfo)
345
351
{
346
352
std::string upperName = ToUpper (name);
347
-
353
+ LOCK (cs_spark_name);
348
354
if (sparkNames.count (upperName) > 0 && address != sparkNames[upperName].sparkAddress )
349
355
return false ;
350
356
else if (sparkNameAddresses.count (address) > 0 )
@@ -360,7 +366,7 @@ bool CSparkNameManager::AddSparkName(const std::string &name, const std::string
360
366
bool CSparkNameManager::RemoveSparkName (const std::string &name, const std::string &address)
361
367
{
362
368
std::string upperName = ToUpper (name);
363
-
369
+ LOCK (cs_spark_name);
364
370
if (sparkNames.count (upperName) == 0 || sparkNameAddresses.count (address) == 0 )
365
371
return false ;
366
372
@@ -375,7 +381,7 @@ bool CSparkNameManager::RemoveSparkName(const std::string &name, const std::stri
375
381
std::map<std::string, CSparkNameBlockIndexData> CSparkNameManager::RemoveSparkNamesLosingValidity (int nHeight)
376
382
{
377
383
std::map<std::string, CSparkNameBlockIndexData> result;
378
-
384
+ LOCK (cs_spark_name);
379
385
for (auto it = sparkNames.begin (); it != sparkNames.end ();)
380
386
if (cmp::greater_equal (nHeight, it->second .sparkNameValidityHeight )) {
381
387
std::string sparkAddressStr = it->second .sparkAddress ;
@@ -403,6 +409,7 @@ bool CSparkNameManager::IsSparkNameValid(const std::string &name)
403
409
404
410
void CSparkNameManager::Reset ()
405
411
{
412
+ LOCK (cs_spark_name);
406
413
sparkNames.clear ();
407
414
sparkNameAddresses.clear ();
408
415
}
0 commit comments