mirror of
https://github.com/monero-project/monero.git
synced 2024-11-17 08:17:37 +00:00
Fixup RENAME_DB() macro
Make sure target DB's record is on a writable page
This commit is contained in:
parent
8bf5a00564
commit
fe1256471a
1 changed files with 12 additions and 2 deletions
|
@ -3490,7 +3490,17 @@ void BlockchainLMDB::fixup()
|
||||||
BlockchainDB::fixup();
|
BlockchainDB::fixup();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RENAME_DB(name) \
|
#define RENAME_DB(name) do { \
|
||||||
|
char n2[] = name; \
|
||||||
|
MDB_dbi tdbi; \
|
||||||
|
n2[sizeof(n2)-2]--; \
|
||||||
|
/* play some games to put (name) on a writable page */ \
|
||||||
|
result = mdb_dbi_open(txn, n2, MDB_CREATE, &tdbi); \
|
||||||
|
if (result) \
|
||||||
|
throw0(DB_ERROR(lmdb_error("Failed to create " + std::string(n2) + ": ", result).c_str())); \
|
||||||
|
result = mdb_drop(txn, tdbi, 1); \
|
||||||
|
if (result) \
|
||||||
|
throw0(DB_ERROR(lmdb_error("Failed to delete " + std::string(n2) + ": ", result).c_str())); \
|
||||||
k.mv_data = (void *)name; \
|
k.mv_data = (void *)name; \
|
||||||
k.mv_size = sizeof(name)-1; \
|
k.mv_size = sizeof(name)-1; \
|
||||||
result = mdb_cursor_open(txn, 1, &c_cur); \
|
result = mdb_cursor_open(txn, 1, &c_cur); \
|
||||||
|
@ -3500,7 +3510,7 @@ void BlockchainLMDB::fixup()
|
||||||
if (result) \
|
if (result) \
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to get DB record for " name ": ", result).c_str())); \
|
throw0(DB_ERROR(lmdb_error("Failed to get DB record for " name ": ", result).c_str())); \
|
||||||
ptr = (char *)k.mv_data; \
|
ptr = (char *)k.mv_data; \
|
||||||
ptr[sizeof(name)-2]++
|
ptr[sizeof(name)-2]++; } while(0)
|
||||||
|
|
||||||
#define LOGIF(y) if (ELPP->vRegistry()->allowed(y, "global"))
|
#define LOGIF(y) if (ELPP->vRegistry()->allowed(y, "global"))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue