Почему операция создания интеллектуального указателя в функции прерывает выполнение этой функции в потоке?
Суть такова.
Создаю многопоточный вариант демона Bytecoin (https://github.com/ProofOfRight/bcn_multithreaded). Завернул операции в stand, mutex и т.д. И вот вроде все заработало...
Но, при вызове функции сохранения данных (первым происходит сохранение пиров p2p-сети https://github.com/ProofOfRight/bcn_multithreaded/blob/master/src/p2p/PeerDB.cpp) происходит обрыв выполнения кода. Не знаю, как это назвать по другому, но выглядит это именно так.
void PeerDB::db_commit() {
m_log(logging::INFO) << "PeerDB::db_commit thread=" << std::this_thread::get_id();
db.commit_db_txn();
commit_timer.once(float(config.db_commit_period_peers));
}
в вызове метода db.commit_db_txn() есть код:
db_txn = std::make_shared<lmdb::Txn>(db_env.get());
В оригинале было немного иначе:
db_txn = std::make_unique<lmdb::Txn>(db_env);
потому что я уже пробовал различные варианты как указателей так и типов для инициализации конструктора. Но суть от этого не меняется. На этой строке выполнение метода прерывается и возврата в вызывавший его метод не происходит. Т.е. происходит __ ничего __. Во всяком случае такое поведение наблюдается при сборке под VS2019.
Оборачивал в try, результат нулевой, catch ничего не перехватывает. В общем, не понимаю, что за фолшепство там происходит. Помогите пожалуйста.