Skip to content

Commit d7d6411

Browse files
Fix freex for spark spend case
1 parent dee9dba commit d7d6411

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

src/qt/walletmodel.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,7 +1086,7 @@ QString WalletModel::generateSparkAddress()
10861086
LOCK(wallet->cs_wallet);
10871087
address = wallet->sparkWallet->generateNewAddress();
10881088
unsigned char network = spark::GetNetworkType();
1089-
1089+
10901090
wallet->SetSparkAddressBook(address.encode(network), "", "receive");
10911091
return QString::fromStdString(address.encode(network));
10921092
}
@@ -1326,7 +1326,6 @@ bool WalletModel::sparkNamesAllowed() const
13261326

13271327
bool WalletModel::GetSparkNameByAddress(const QString& sparkAddress, QString& name)
13281328
{
1329-
LOCK(cs_main);
13301329
std::string name_ = name.toStdString();
13311330
bool result = CSparkNameManager::GetInstance()->GetSparkNameByAddress(sparkAddress.toStdString(), name_);
13321331
if (result)
@@ -1341,14 +1340,10 @@ bool WalletModel::validateSparkNameData(const QString &name, const QString &spar
13411340
sparkNameData.sparkAddress = sparkAddress.toStdString();
13421341
sparkNameData.additionalInfo = additionalData.toStdString();
13431342
sparkNameData.sparkNameValidityBlocks = 1000; // doesn't matter
1344-
1345-
{
1346-
LOCK(cs_main);
1347-
std::string _strError;
1348-
bool result = CSparkNameManager::GetInstance()->ValidateSparkNameData(sparkNameData, _strError);
1349-
strError = QString::fromStdString(_strError);
1350-
return result;
1351-
}
1343+
std::string _strError;
1344+
bool result = CSparkNameManager::GetInstance()->ValidateSparkNameData(sparkNameData, _strError);
1345+
strError = QString::fromStdString(_strError);
1346+
return result;
13521347
}
13531348

13541349
WalletModelTransaction WalletModel::initSparkNameTransaction(CAmount sparkNameFee) {
@@ -1363,7 +1358,6 @@ WalletModelTransaction WalletModel::initSparkNameTransaction(CAmount sparkNameFe
13631358
}
13641359

13651360
QString WalletModel::getSparkNameAddress(const QString &sparkName) {
1366-
LOCK(cs_main);
13671361
CSparkNameManager *sparkNameManager = CSparkNameManager::GetInstance();
13681362
std::string sparkAddress;
13691363
if (sparkNameManager->GetSparkAddress(sparkName.toStdString(), sparkAddress)) {

src/sparkname.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ CSparkNameManager *CSparkNameManager::sharedSparkNameManager = new CSparkNameMan
1313

1414
bool CSparkNameManager::AddBlock(CBlockIndex *pindex, bool fBackupRewrittenEntries)
1515
{
16+
LOCK(cs_spark_name);
1617
for (const auto &entry : pindex->removedSparkNames) {
1718
sparkNameAddresses.erase(entry.second.sparkAddress);
1819
sparkNames.erase(ToUpper(entry.first));
@@ -33,6 +34,7 @@ bool CSparkNameManager::AddBlock(CBlockIndex *pindex, bool fBackupRewrittenEntri
3334

3435
bool CSparkNameManager::RemoveBlock(CBlockIndex *pindex)
3536
{
37+
LOCK(cs_spark_name);
3638
for (const auto &entry : pindex->addedSparkNames) {
3739
sparkNames.erase(ToUpper(entry.first));
3840
sparkNameAddresses.erase(entry.second.sparkAddress);
@@ -188,8 +190,11 @@ bool CSparkNameManager::CheckSparkNameTx(const CTransaction &tx, int nHeight, CV
188190
fUpdateExistingRecord = true;
189191
}
190192

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+
}
193198

194199
// calculate the hash of the all the transaction except the spark ownership proof
195200
CMutableTransaction txMutable(tx);
@@ -238,6 +243,7 @@ bool CSparkNameManager::CheckSparkNameTx(const CTransaction &tx, int nHeight, CV
238243

239244
bool CSparkNameManager::GetSparkNameByAddress(const std::string& address, std::string& name)
240245
{
246+
LOCK(cs_spark_name);
241247
auto it = sparkNameAddresses.find(address);
242248
if (it != sparkNameAddresses.end()) {
243249
name = sparkNames[it->second].name;
@@ -249,7 +255,7 @@ bool CSparkNameManager::GetSparkNameByAddress(const std::string& address, std::s
249255
bool CSparkNameManager::ValidateSparkNameData(const CSparkNameTxData &sparkNameData, std::string &errorDescription)
250256
{
251257
errorDescription.clear();
252-
258+
LOCK(cs_spark_name);
253259
if (!IsSparkNameValid(sparkNameData.name))
254260
errorDescription = "invalid spark name";
255261

@@ -344,7 +350,7 @@ std::string CSparkNameManager::ToUpper(const std::string &str)
344350
bool CSparkNameManager::AddSparkName(const std::string &name, const std::string &address, uint32_t validityBlocks, const std::string &additionalInfo)
345351
{
346352
std::string upperName = ToUpper(name);
347-
353+
LOCK(cs_spark_name);
348354
if (sparkNames.count(upperName) > 0 && address != sparkNames[upperName].sparkAddress)
349355
return false;
350356
else if (sparkNameAddresses.count(address) > 0)
@@ -360,7 +366,7 @@ bool CSparkNameManager::AddSparkName(const std::string &name, const std::string
360366
bool CSparkNameManager::RemoveSparkName(const std::string &name, const std::string &address)
361367
{
362368
std::string upperName = ToUpper(name);
363-
369+
LOCK(cs_spark_name);
364370
if (sparkNames.count(upperName) == 0 || sparkNameAddresses.count(address) == 0)
365371
return false;
366372

@@ -375,7 +381,7 @@ bool CSparkNameManager::RemoveSparkName(const std::string &name, const std::stri
375381
std::map<std::string, CSparkNameBlockIndexData> CSparkNameManager::RemoveSparkNamesLosingValidity(int nHeight)
376382
{
377383
std::map<std::string, CSparkNameBlockIndexData> result;
378-
384+
LOCK(cs_spark_name);
379385
for (auto it = sparkNames.begin(); it != sparkNames.end();)
380386
if (cmp::greater_equal(nHeight, it->second.sparkNameValidityHeight)) {
381387
std::string sparkAddressStr = it->second.sparkAddress;
@@ -403,6 +409,7 @@ bool CSparkNameManager::IsSparkNameValid(const std::string &name)
403409

404410
void CSparkNameManager::Reset()
405411
{
412+
LOCK(cs_spark_name);
406413
sparkNames.clear();
407414
sparkNameAddresses.clear();
408415
}

src/sparkname.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ class CSparkNameManager
9090
std::map<std::string, CSparkNameBlockIndexData> sparkNames;
9191
std::map<std::string, std::string> sparkNameAddresses;
9292

93+
mutable CCriticalSection cs_spark_name;
94+
9395
public:
9496
static const unsigned maximumSparkNameLength = 20;
9597

0 commit comments

Comments
 (0)