]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb/tdb.c
Don't fail mysteriously on existing trace file.
[ccan] / ccan / tdb / tdb.c
index c44987a14e01f343c008e403eb789bd3973a33dd..42d2438b08be960838733f24bd422f6fdbcaad19 100644 (file)
@@ -96,6 +96,11 @@ static tdb_off_t tdb_find(struct tdb_context *tdb, TDB_DATA key, uint32_t hash,
                                      NULL) == 0) {
                        return rec_ptr;
                }
+               /* detect tight infinite loop */
+               if (rec_ptr == r->next) {
+                       TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_find: loop detected.\n"));
+                       return TDB_ERRCODE(TDB_ERR_CORRUPT, 0);
+               }
                rec_ptr = r->next;
        }
        return TDB_ERRCODE(TDB_ERR_NOEXIST, 0);
@@ -898,6 +903,16 @@ void tdb_trace(struct tdb_context *tdb, const char *op)
        tdb_trace_end(tdb);
 }
 
+void tdb_trace_seqnum(struct tdb_context *tdb, uint32_t seqnum, const char *op)
+{
+       char msg[sizeof(tdb_off_t) * 4];
+
+       sprintf(msg, "%u ", seqnum);
+       tdb_trace_write(tdb, msg);
+       tdb_trace_write(tdb, op);
+       tdb_trace_end(tdb);
+}
+
 void tdb_trace_open(struct tdb_context *tdb, const char *op,
                    unsigned hash_size, unsigned tdb_flags, unsigned open_flags)
 {