summaryrefslogtreecommitdiff
path: root/src/tty-ask-password-agent
diff options
context:
space:
mode:
Diffstat (limited to 'src/tty-ask-password-agent')
-rw-r--r--src/tty-ask-password-agent/tty-ask-password-agent.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c
index 72b04e6f0e..504ba9162d 100644
--- a/src/tty-ask-password-agent/tty-ask-password-agent.c
+++ b/src/tty-ask-password-agent/tty-ask-password-agent.c
@@ -417,6 +417,9 @@ static int process_one_password_file(const char *filename) {
if (r < 0)
return log_error_errno(r, "Failed to query password: %m");
+ if (strv_isempty(passwords))
+ return -ECANCELED;
+
r = send_passwords(socket_name, passwords);
if (r < 0)
return log_error_errno(r, "Failed to send: %m");
@@ -525,11 +528,20 @@ static int process_and_watch_password_files(void) {
pollfd[FD_SIGNAL].events = POLLIN;
for (;;) {
+ int timeout = -1;
+
r = process_password_files();
- if (r < 0)
- log_error_errno(r, "Failed to process password: %m");
+ if (r < 0) {
+ if (r == -ECANCELED)
+ /* Disable poll() timeout since at least one password has
+ * been skipped and therefore one file remains and is
+ * unlikely to trigger any events. */
+ timeout = 0;
+ else
+ log_error_errno(r, "Failed to process password: %m");
+ }
- if (poll(pollfd, _FD_MAX, -1) < 0) {
+ if (poll(pollfd, _FD_MAX, timeout) < 0) {
if (errno == EINTR)
continue;