Fix a few db access crashes

This commit is contained in:
Nicolas Werner 2021-03-12 17:13:56 +01:00
parent 2a70847c80
commit 6ad4065de4
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
2 changed files with 14 additions and 5 deletions

View File

@ -787,6 +787,9 @@ Cache::isInitialized()
std::string
Cache::nextBatchToken()
{
if (!env_.handle())
throw lmdb::error("Env already closed", MDB_INVALID);
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
std::string_view token;
@ -1816,6 +1819,9 @@ Cache::getTimelineRange(const std::string &room_id)
std::optional<uint64_t>
Cache::getTimelineIndex(const std::string &room_id, std::string_view event_id)
{
if (event_id.empty() || room_id.empty())
return {};
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
lmdb::dbi orderDb;

View File

@ -873,11 +873,14 @@ ChatPage::trySync()
http::client()->sync(
opts,
[this, since = cache::nextBatchToken()](const mtx::responses::Sync &res,
mtx::http::RequestErr err) {
if (since != cache::nextBatchToken()) {
nhlog::net()->warn("Duplicate sync, dropping");
return;
[this, since = opts.since](const mtx::responses::Sync &res, mtx::http::RequestErr err) {
try {
if (since != cache::nextBatchToken()) {
nhlog::net()->warn("Duplicate sync, dropping");
return;
}
} catch (const lmdb::error &e) {
nhlog::db()->warn("Logged out in the mean time, dropping sync");
}
if (err) {