From e26fc734177ccc4da91d6bf79035a9dda354784a Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 7 Dec 2012 13:19:36 -0800 Subject: [PATCH] ITS#7467 add verbose freelist info --- libraries/liblmdb/mdb_stat.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libraries/liblmdb/mdb_stat.c b/libraries/liblmdb/mdb_stat.c index e9981f6016..13a24f9cbd 100644 --- a/libraries/liblmdb/mdb_stat.c +++ b/libraries/liblmdb/mdb_stat.c @@ -31,7 +31,7 @@ static void prstat(MDB_stat *ms) static void usage(char *prog) { - fprintf(stderr, "usage: %s dbpath [-e] [-f] [-n] [-a|-s subdb]\n", prog); + fprintf(stderr, "usage: %s dbpath [-e] [-f[f]] [-n] [-a|-s subdb]\n", prog); exit(EXIT_FAILURE); } @@ -122,7 +122,7 @@ int main(int argc, char *argv[]) if (freinfo) { MDB_cursor *cursor; - MDB_val data; + MDB_val key, data; size_t pages = 0, *iptr; printf("Freelist Status\n"); @@ -137,12 +137,20 @@ int main(int argc, char *argv[]) printf("mdb_stat failed, error %d %s\n", rc, mdb_strerror(rc)); goto txn_abort; } - while ((rc = mdb_cursor_get(cursor, NULL, &data, MDB_NEXT)) == 0) { + prstat(&mst); + while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { iptr = data.mv_data; pages += *iptr; + if (freinfo > 1) { + size_t i, j; + j = *iptr++; + printf(" Transaction %zu, %zu pages\n", + *(size_t *)key.mv_data, j); + for (i=0; i