Merge pull request #572

b39aae7 Tweak 45800a25e9 (hyc)
4a5a5ff blockchain: always stop the ioservice before returning (moneromooo-monero)
78b65cf db_lmdb: safety close db at exit (moneromooo-monero)
45800a2 db_lmdb: fix a strdup/delete[] mistmatch (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2015-12-30 09:38:41 +02:00
commit fd36eea6dd
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD
2 changed files with 11 additions and 3 deletions

View file

@ -130,13 +130,16 @@ private:
template<> template<>
struct MDB_val_copy<const char*>: public MDB_val struct MDB_val_copy<const char*>: public MDB_val
{ {
MDB_val_copy(const char *s) : MDB_val_copy(const char *s):
data(strdup(s)) size(strlen(s)+1), // include the NUL, makes it easier for compares
data(new char[size])
{ {
mv_size = strlen(s) + 1; // include the NUL, makes it easier for compares mv_size = size;
mv_data = data.get(); mv_data = data.get();
memcpy(mv_data, s, size);
} }
private: private:
size_t size;
std::unique_ptr<char[]> data; std::unique_ptr<char[]> data;
}; };
@ -923,6 +926,8 @@ BlockchainLMDB::~BlockchainLMDB()
// batch transaction shouldn't be active at this point. If it is, consider it aborted. // batch transaction shouldn't be active at this point. If it is, consider it aborted.
if (m_batch_active) if (m_batch_active)
batch_abort(); batch_abort();
if (m_open)
close();
} }
BlockchainLMDB::BlockchainLMDB(bool batch_transactions) BlockchainLMDB::BlockchainLMDB(bool batch_transactions)
@ -1153,6 +1158,7 @@ void BlockchainLMDB::close()
// FIXME: not yet thread safe!!! Use with care. // FIXME: not yet thread safe!!! Use with care.
mdb_env_close(m_env); mdb_env_close(m_env);
m_open = false;
} }
void BlockchainLMDB::sync() void BlockchainLMDB::sync()

View file

@ -2109,6 +2109,7 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
if(have_tx_keyimg_as_spent(in_to_key.k_image)) if(have_tx_keyimg_as_spent(in_to_key.k_image))
{ {
LOG_PRINT_L1("Key image already spent in blockchain: " << epee::string_tools::pod_to_hex(in_to_key.k_image)); LOG_PRINT_L1("Key image already spent in blockchain: " << epee::string_tools::pod_to_hex(in_to_key.k_image));
KILL_IOSERVICE();
return false; return false;
} }
@ -2122,6 +2123,7 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
if(!itk->second) if(!itk->second)
{ {
LOG_PRINT_L1("Failed ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index); LOG_PRINT_L1("Failed ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index);
KILL_IOSERVICE();
return false; return false;
} }