- Out of memory errors.
- Read/write errors on local files.
- Persistent communication errors with RPKI repositories (see [`--stale-repository-period`](usage.html#--stale-repository-period)).
-- Start and end of a validation cycle, including: number of valid Prefixes and Router Keys, current RTR serial number (only when [`--mode=server`](usage.html#--mode), and real execution time.
+- Start and end of a validation cycle, including: number of valid Prefixes and Router Keys, current RTR serial number (only when [`--mode=server`](usage.html#--mode)), and real execution time.
- Programming errors (of course, those that could be expected due to an API misuse).
### Validation
}
static struct error_uri *
-find_error_uri(char const *search)
+find_error_uri(char const *search, bool lock)
{
struct error_uri *found;
- rwlock_read_lock(&db_lock);
+ if (lock)
+ rwlock_read_lock(&db_lock);
HASH_FIND_STR(err_uris_db, search, found);
- rwlock_unlock(&db_lock);
+ if (lock)
+ rwlock_unlock(&db_lock);
return found;
}
if (work_uri == NULL)
return;
- ref = find_error_uri(work_uri);
+ ref = find_error_uri(work_uri, true);
if (ref == NULL)
return;
int error;
/* Don't overwrite if it already exists */
- found_uri = find_error_uri(uri);
+ found_uri = find_error_uri(uri, true);
if (found_uri != NULL)
return 0;
reqs_errors_rem_uri(char const *uri)
{
struct error_uri *found_uri;
+ struct error_uri *tmp;
char *ref_uri;
- found_uri = find_error_uri(uri);
- if (found_uri == NULL)
+ rwlock_write_lock(&db_lock);
+ found_uri = find_error_uri(uri, false);
+ if (found_uri == NULL) {
+ rwlock_unlock(&db_lock);
return;
+ }
- while (found_uri->uri_related != NULL)
- found_uri = find_error_uri(found_uri->uri_related);
+ while (found_uri->uri_related != NULL) {
+ tmp = find_error_uri(found_uri->uri_related, false);
+ if (tmp == NULL)
+ break;
+ found_uri = tmp;
+ }
- rwlock_write_lock(&db_lock);
do {
ref_uri = found_uri->ref_by;
HASH_DELETE(hh, err_uris_db, found_uri);
if (ref_uri == NULL)
break;
HASH_FIND_STR(err_uris_db, ref_uri, found_uri);
+ if (found_uri == NULL)
+ break;
} while (true);
rwlock_unlock(&db_lock);
}
if (config_period == 0)
return true;
- node = find_error_uri(uri);
+ node = find_error_uri(uri, true);
if (node == NULL)
return false;