summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/diagnose_227524
-rw-r--r--src/common/storagedir.c6
-rw-r--r--src/or/consdiffmgr.c6
3 files changed, 13 insertions, 3 deletions
diff --git a/changes/diagnose_22752 b/changes/diagnose_22752
new file mode 100644
index 0000000000..b5bda05ec0
--- /dev/null
+++ b/changes/diagnose_22752
@@ -0,0 +1,4 @@
+ o Minor features (bug mitigation, diagnostics, logging):
+ - Avoid an assertion failure, and log a better error message,
+ when unable to remove a file from the consensus cache on
+ Windows. Attempts to mitigate and diagnose bug 22752.
diff --git a/src/common/storagedir.c b/src/common/storagedir.c
index 4405731884..31933f64c2 100644
--- a/src/common/storagedir.c
+++ b/src/common/storagedir.c
@@ -119,7 +119,8 @@ storage_dir_clean_tmpfiles(storage_dir_t *d)
char *path = NULL;
tor_asprintf(&path, "%s/%s", d->directory, fname);
if (unlink(sandbox_intern_string(path))) {
- log_warn(LD_FS, "Unable to unlink %s", escaped(path));
+ log_warn(LD_FS, "Unable to unlink %s while cleaning "
+ "temporary files: %s", escaped(path), strerror(errno));
tor_free(path);
continue;
}
@@ -455,7 +456,8 @@ storage_dir_remove_file(storage_dir_t *d,
if (unlink(ipath) == 0) {
storage_dir_reduce_usage(d, size);
} else {
- log_warn(LD_FS, "Unable to unlink %s", escaped(path));
+ log_warn(LD_FS, "Unable to unlink %s while removing file: %s",
+ escaped(path), strerror(errno));
tor_free(path);
return;
}
diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 4036f665f9..638fcd6794 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -325,7 +325,8 @@ cdm_diff_ht_purge(consensus_flavor_t flav,
if ((*diff)->cdm_diff_status == CDM_DIFF_PRESENT &&
flav == (*diff)->flavor) {
- if (consensus_cache_entry_handle_get((*diff)->entry) == NULL) {
+ if (BUG((*diff)->entry == NULL) ||
+ consensus_cache_entry_handle_get((*diff)->entry) == NULL) {
/* the underlying entry has gone away; drop this. */
next = HT_NEXT_RMV(cdm_diff_ht, &cdm_diff_ht, diff);
cdm_diff_free(this);
@@ -622,6 +623,9 @@ consdiffmgr_find_diff_from(consensus_cache_entry_t **entry_out,
return CONSDIFF_IN_PROGRESS;
}
+ if (BUG(ent->entry == NULL)) {
+ return CONSDIFF_NOT_FOUND;
+ }
*entry_out = consensus_cache_entry_handle_get(ent->entry);
return (*entry_out) ? CONSDIFF_AVAILABLE : CONSDIFF_NOT_FOUND;