]> git.sur5r.net Git - openldap/commitdiff
Tweak mdb_stat(1)
authorHoward Chu <hyc@symas.com>
Thu, 18 Jul 2013 15:33:24 +0000 (08:33 -0700)
committerHoward Chu <hyc@symas.com>
Thu, 18 Jul 2013 15:33:24 +0000 (08:33 -0700)
Don't obtain reader txn before displaying reader table. Exit
after reader table if no other DB query options were given.

libraries/liblmdb/mdb.c
libraries/liblmdb/mdb_stat.c

index f86ec356b6f6845c3a2de0d8c261dac6c42de1e5..e15b5bdb8e0b52fba3d9c519dda8761cc3c46f5c 100644 (file)
@@ -7926,7 +7926,7 @@ int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx)
        if (!env || !func)
                return -1;
        if (!env->me_txns) {
-               return func("No reader locks\n", ctx);
+               return func("(no reader locks)\n", ctx);
        }
        rdrs = env->me_numreaders;
        mr = env->me_txns->mti_readers;
@@ -7949,6 +7949,9 @@ int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx)
                                return rc;
                }
        }
+       if (first) {
+               func("(no active readers)\n", ctx);
+       }
        return 0;
 }
 /** @} */
index 5a0946683df1abc1678e4a6f6fd261425d42a6bd..8331bb9cde89656d0a66bb47c4764a23c1fb3d81 100644 (file)
@@ -31,7 +31,7 @@ static void prstat(MDB_stat *ms)
 
 static void usage(char *prog)
 {
-       fprintf(stderr, "usage: %s dbpath [-e] [-f[f[f]]] [-n] [-a|-s subdb] [-r]\n", prog);
+       fprintf(stderr, "usage: %s dbpath [-n] [-e] [-r] | [-f[f[f]]] [-a|-s subdb]\n", prog);
        exit(EXIT_FAILURE);
 }
 
@@ -56,6 +56,7 @@ int main(int argc, char *argv[])
         * -s: print stat of only the named subDB
         * -e: print env info
         * -f: print freelist info
+        * -r: print reader info
         * -n: use NOSUBDIR flag on env_open
         * (default) print stat of only the main DB
         */
@@ -103,11 +104,6 @@ int main(int argc, char *argv[])
                printf("mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc));
                goto env_close;
        }
-       rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);
-       if (rc) {
-               printf("mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc));
-               goto env_close;
-       }
 
        if (envinfo) {
                rc = mdb_env_stat(env, &mst);
@@ -126,6 +122,14 @@ int main(int argc, char *argv[])
        if (rdrinfo) {
                printf("Reader Table Status\n");
                rc = mdb_reader_list(env, (MDB_msg_func *)fputs, stdout);
+               if (!(subname || alldbs || freinfo))
+                       goto env_close;
+       }
+
+       rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);
+       if (rc) {
+               printf("mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc));
+               goto env_close;
        }
 
        if (freinfo) {