diff --git a/src/dfi/rpc_accounts.cpp b/src/dfi/rpc_accounts.cpp index 095d0deaed..9539536006 100644 --- a/src/dfi/rpc_accounts.cpp +++ b/src/dfi/rpc_accounts.cpp @@ -3300,10 +3300,16 @@ UniValue logdvmstate(const JSONRPCRequest &request) { } .Check(request); + const auto fileSize = request.params[0].isNull() ? 1 : request.params[0].get_int64(); + if (fileSize <= 0) { + throw JSONRPCError(RPC_INVALID_PARAMETER, "Size must be more then zero"); + } + LOCK(cs_main); // Flush any pending changes to the DB. Not always written to disk. pcustomcsview->Flush(); + pcustomcsDB->Flush(); // Get the CDBWrapper instance from CCustomCSView auto db = pcustomcsview->GetStorage().GetStorageLevelDB()->GetDB(); @@ -3311,11 +3317,6 @@ UniValue logdvmstate(const JSONRPCRequest &request) { // Create a CDBIterator auto pcursor = db->NewIterator(leveldb::ReadOptions()); - const auto fileSize = request.params[0].isNull() ? 1 : request.params[0].get_int64(); - if (fileSize <= 0) { - throw JSONRPCError(RPC_INVALID_PARAMETER, "Size must be more then zero"); - } - const size_t MAX_FILE_SIZE = fileSize * 1024 * 1048576; // 1MB = 1048576 bytes fs::path dumpsDir = GetDataDir() / "dumps"; @@ -3358,6 +3359,10 @@ UniValue logdvmstate(const JSONRPCRequest &request) { // Iterate over all key-value pairs while (pcursor->Valid()) { + if (ShutdownRequested()) { + break; + } + // Get the key and value slices auto keySlice = pcursor->GetKey(); auto valueSlice = pcursor->GetValue();