Почему операция создания интеллектуального указателя в функции прерывает выполнение этой функции в потоке?

Суть такова. Создаю многопоточный вариант демона 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 ничего не перехватывает. В общем, не понимаю, что за фолшепство там происходит. Помогите пожалуйста.


Ответы (0 шт):