for (len = 0; off + len < tdb->map_size; len++) {
char c;
- if (tdb->methods->read(tdb, off, &c, 1))
+ if (tdb->methods->tread(tdb, off, &c, 1))
return 0;
if (c != 0 && c != 0x43)
break;
}
/* This record should be in free lists. */
if (frec_ftable(&rec.f) != TDB_FTABLE_NONE
- && !append(fr, num_free, off))
+ && !append(fr, num_free, off)) {
+ tdb_logerr(tdb, TDB_ERR_OOM,
+ TDB_DEBUG_ERROR,
+ "tdb_check: tracking %zu'th"
+ " free record.", *num_free);
return false;
+ }
} else if (rec_magic(&rec.u) == TDB_USED_MAGIC
|| rec_magic(&rec.u) == TDB_CHAIN_MAGIC
|| rec_magic(&rec.u) == TDB_HTABLE_MAGIC
uint64_t klen, dlen, extra;
/* This record is used! */
- if (!append(used, num_used, off))
+ if (!append(used, num_used, off)) {
+ tdb_logerr(tdb, TDB_ERR_OOM,
+ TDB_DEBUG_ERROR,
+ "tdb_check: tracking %zu'th"
+ " used record.", *num_used);
return false;
+ }
klen = rec_key_length(&rec.u);
dlen = rec_data_length(&rec.u);
tdb_allrecord_unlock(tdb, F_RDLCK);
tdb_unlock_expand(tdb, F_RDLCK);
+ free(fr);
+ free(used);
return 0;
fail:
+ free(fr);
+ free(used);
tdb_allrecord_unlock(tdb, F_RDLCK);
tdb_unlock_expand(tdb, F_RDLCK);
return -1;