diff --git a/src/Cache.cpp b/src/Cache.cpp
index 87dbfb8c..0817a2d1 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -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;
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 9a823f17..d7ea4301 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -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) {
|