diff --git a/src/db/storage.cpp b/src/db/storage.cpp index dde0448..e6424c8 100644 --- a/src/db/storage.cpp +++ b/src/db/storage.cpp @@ -1100,7 +1100,9 @@ namespace db MDB_val key = lmdb::to_val(type); MDB_val value = lmdb::to_val(address); - MLWS_LMDB_CHECK(mdb_cursor_get(cur.get(), &key, &value, MDB_GET_BOTH)); + const int err = mdb_cursor_get(cur.get(), &key, &value, MDB_GET_BOTH); + if (err) + return log_lmdb_error(err, __LINE__, __FILE__, MDB_NOTFOUND); return requests.get_value(value); } @@ -1148,11 +1150,7 @@ namespace db const int err = mdb_cursor_get(cur.get(), &key, &value, MDB_GET_BOTH); if (err) - { - if (err != MDB_NOTFOUND) - return log_lmdb_error(err, __LINE__, __FILE__); - return {lmdb::error(err)}; // do not log MDB_NOTFOUND; expected - } + return log_lmdb_error(err, __LINE__, __FILE__, MDB_NOTFOUND); return subaddress_indexes.get_value(value); } diff --git a/src/lmdb/lws_error.cpp b/src/lmdb/lws_error.cpp index 2acd906..f0ae2c8 100644 --- a/src/lmdb/lws_error.cpp +++ b/src/lmdb/lws_error.cpp @@ -30,14 +30,18 @@ #include "lmdb/error.h" // monero/src #include "misc_log_ex.h" // monero/src -std::error_code lws::log_lmdb_error(const int err, const int line, const char* file) +std::error_code lws::log_lmdb_error(const int err, const int line, const char* file, int skip) { const std::error_code code{lmdb::error(err)}; - char const* const name_end = std::strrchr(file, '/'); - if (name_end) - file = name_end + 1; - MERROR("lmdb error (" << file << ':' << line << "): " << code.message()); + if (err != skip) + { + char const* const name_end = std::strrchr(file, '/'); + if (name_end) + file = name_end + 1; + + MERROR("lmdb error (" << file << ':' << line << "): " << code.message()); + } return code; } diff --git a/src/lmdb/lws_error.h b/src/lmdb/lws_error.h index 4a72a8b..806e243 100644 --- a/src/lmdb/lws_error.h +++ b/src/lmdb/lws_error.h @@ -38,5 +38,5 @@ namespace lws { - std::error_code log_lmdb_error(int err, int line, const char* file); + std::error_code log_lmdb_error(int err, int line, const char* file, int skip = 0); } diff --git a/src/lws_version.h.in b/src/lws_version.h.in index e5f0146..3b64b82 100644 --- a/src/lws_version.h.in +++ b/src/lws_version.h.in @@ -33,7 +33,7 @@ namespace lws { namespace version constexpr const char branch[] = "@MLWS_COMMIT_BRANCH@"; constexpr const char commit[] = "@MLWS_COMMIT_HASH@"; constexpr const char date[] = "@MLWS_COMMIT_DATE@"; - constexpr const char id[] = "0.4-alpha"; + constexpr const char id[] = "1.0-alpha"; constexpr const char name[] = "monero-lws"; // openmonero is currently on 1.6 and we have multiple additions since then diff --git a/src/rpc/admin.cpp b/src/rpc/admin.cpp index 6f018bc..b888e05 100644 --- a/src/rpc/admin.cpp +++ b/src/rpc/admin.cpp @@ -89,7 +89,8 @@ namespace { wire::object(dest, wire::field("address", lws::db::address_string(self.value.address)), - wire::field("start_height", self.value.start_height) + wire::field("start_height", self.value.start_height), + wire::field("lookahead", self.value.lookahead) ); } diff --git a/src/scanner.cpp b/src/scanner.cpp index 9a77a4a..b416071 100644 --- a/src/scanner.cpp +++ b/src/scanner.cpp @@ -1078,6 +1078,9 @@ namespace lws if (!lws_server_addr.empty()) rpc::scanner::server::start_acceptor(server, lws_server_addr, std::move(lws_server_pass)); + // This is a hack to prevent racy shutdown + boost::asio::post(self.io_, [&self] () { if (!self.is_running()) self.stop(); }); + // Blocks until sigint, local scanner issue, storage issue, or exception self.io_.restart(); self.io_.run();