Skip to content
Snippets Groups Projects
Commit 6905c1f6 authored by Nick Mathewson's avatar Nick Mathewson :game_die:
Browse files

Check more error codes when writing microdescriptors.

Possible partial fix, or diagnosis tool, for bug 8031.
parent d54ccbe9
No related branches found
No related tags found
No related merge requests found
o Minor bugfixes:
- Use direct writes rather than stdio when building microdescriptor
caches, in an attempt to mitigate bug 8031, or at least make it
less common.
- Warn more aggressively when flushing microdescriptors to a
microdescriptor cache fails, in an attempt to mitegate bug 8031,
or at least make it more diagnosable.
......@@ -251,8 +251,14 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
cache->total_len_seen += md->bodylen;
} SMARTLIST_FOREACH_END(md);
if (fd >= 0)
finish_writing_to_file(open_file); /*XXX Check me.*/
if (fd >= 0) {
if (finish_writing_to_file(open_file) < 0) {
log_warn(LD_DIR, "Error appending to microdescriptor file: %s",
strerror(errno));
smartlist_clear(added);
return added;
}
}
{
networkstatus_t *ns = networkstatus_get_latest_consensus();
......@@ -459,11 +465,15 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
smartlist_add(wrote, md);
}
if (finish_writing_to_file(open_file) < 0) {
log_warn(LD_DIR, "Error rebuilding microdescriptor cache: %s",
strerror(errno));
return -1;
}
if (cache->cache_content)
tor_munmap_file(cache->cache_content);
finish_writing_to_file(open_file); /*XXX Check me.*/
cache->cache_content = tor_mmap_file(cache->cache_fname);
if (!cache->cache_content && smartlist_len(wrote)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment