mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 16:45:07 -05:00
util: warn if UTI_OpenFile() is stuck in a loop
When UTI_OpenFile() is removing an existing file to be replaced by a new file, it could potentially get stuck in an infinite loop if something was able to consistently win the race and create a new file before chronyd. Log a warning message after 100 failed attempts and repeat on each 10x increase to make it more obvious to the admin, if it ever happens. Reported-by: Eric Sesterhenn <eric.sesterhenn@x41-dsec.de>
This commit is contained in:
7
util.c
7
util.c
@@ -1364,6 +1364,7 @@ FILE *
|
||||
UTI_OpenFile(const char *basedir, const char *name, const char *suffix,
|
||||
char mode, mode_t perm)
|
||||
{
|
||||
uint64_t attempts = 0, warn_attempts = 100;
|
||||
const char *file_mode;
|
||||
char path[PATH_MAX];
|
||||
LOG_Severity severity;
|
||||
@@ -1407,6 +1408,12 @@ try_again:
|
||||
return NULL;
|
||||
}
|
||||
DEBUG_LOG("Removed %s", path);
|
||||
|
||||
if (++attempts == warn_attempts) {
|
||||
LOG(LOGS_WARN, "Failing to replace %s (%"PRIu64" attempts)", path, attempts);
|
||||
warn_attempts *= 10;
|
||||
}
|
||||
|
||||
goto try_again;
|
||||
}
|
||||
LOG(severity, "Could not open %s : %s", path, strerror(errno));
|
||||
|
||||
Reference in New Issue
Block a user