X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Fcheck.c;h=afb682f5e74c8869f77a12ca8436f797b5413ff2;hb=a2083afe4b327a542649b719e88178279fb5dc88;hp=4da81dbbbb53fa68ab1031fabaaccbc95f3dca2a;hpb=04cf551d15ee93716aa0462adadc0a3891480813;p=ccan diff --git a/ccan/tdb2/check.c b/ccan/tdb2/check.c index 4da81dbb..afb682f5 100644 --- a/ccan/tdb2/check.c +++ b/ccan/tdb2/check.c @@ -603,8 +603,13 @@ static bool check_linear(struct tdb_context *tdb, } /* 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 @@ -612,8 +617,13 @@ static bool check_linear(struct tdb_context *tdb, 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); @@ -700,9 +710,13 @@ int tdb_check(struct tdb_context *tdb, 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;