- tls: send alert to peer if handshake fails (!1007)
- cache: fix interaction between LMDB locks and preallocation (!1013)
- cache garbage collector: fix flushing of messages to logs (!1009)
+- cache garbage collector: fix insufficient GC on 32-bit systems (!1009)
Knot Resolver 5.1.1 (2020-05-19)
for (int i = 0; i < CATEGORIES; ++i) {
cats_sumsize += cats.categories_sizes[i];
}
- ssize_t amount_tofree = knot_db_lmdb_get_mapsize(db) * cfg->cache_to_be_freed
- * cats_sumsize / (100 * knot_db_lmdb_get_usage(db));
+ /* use less precise variant to avoid 32-bit overflow */
+ ssize_t amount_tofree = cats_sumsize / 100 * cfg->cache_to_be_freed;
#ifdef DEBUG
printf("tofree: %zd\n", amount_tofree);
unsigned long rw_txn_delay; // waiting time between two RW transactions in usecs
uint8_t cache_max_usage; // maximum cache usage before triggering GC (percent)
- uint8_t cache_to_be_freed; // percent of cache to be freed during GC
+ uint8_t cache_to_be_freed; // percent of current cache usage to be freed during GC
bool dry_run;
} kr_cache_gc_cfg_t;
printf(" -l <deletes_per_txn>\n");
printf(" -m <rw_txn_duration(usecs)>\n");
printf(" -u <cache_max_usage(percent)>\n");
- printf(" -f <cache_to_be_freed(percent)>\n");
+ printf(" -f <cache_to_be_freed(percent-of-current-usage)>\n");
printf(" -w <wait_next_rw_txn(usecs)>\n");
printf(" -t <temporary_memory(MBytes)>\n");
printf(" -n (= dry run)\n");