diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2011-05-20 03:03:05 +0200 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2011-07-15 10:21:28 +0200 |
commit | 5814222821a5e41e610633b73d6e739be7c4cbad (patch) | |
tree | c624d5213827a3ecbc89b8be26de98ee223a3e39 /src/vdagent.c | |
parent | 0fca86d2dd18e41630ebbca444a696de458a69bd (diff) | |
download | vd_agent-5814222821a5e41e610633b73d6e739be7c4cbad.tar.gz vd_agent-5814222821a5e41e610633b73d6e739be7c4cbad.tar.xz vd_agent-5814222821a5e41e610633b73d6e739be7c4cbad.zip |
Attempt to reconnect to system socket every second when daemonized
https://bugzilla.redhat.com/show_bug.cgi?id=681797
Diffstat (limited to 'src/vdagent.c')
-rw-r--r-- | src/vdagent.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/vdagent.c b/src/vdagent.c index 3569cdb..2b69865 100644 --- a/src/vdagent.c +++ b/src/vdagent.c @@ -76,6 +76,20 @@ void daemon_read_complete(struct udscs_connection **connp, } } +int client_setup(int reconnect) +{ + while (1) { + client = udscs_connect(VDAGENTD_SOCKET, daemon_read_complete, NULL, + vdagentd_messages, VDAGENTD_NO_MESSAGES, + verbose ? logfile : NULL, logfile); + if (client || !reconnect) { + break; + } + sleep(1); + } + return client == NULL; +} + static void usage(FILE *fp) { fprintf(fp, @@ -168,21 +182,16 @@ int main(int argc, char *argv[]) if (do_daemonize) daemonize(); - client = udscs_connect(VDAGENTD_SOCKET, daemon_read_complete, NULL, - vdagentd_messages, VDAGENTD_NO_MESSAGES, - verbose? logfile:NULL, logfile); - if (!client) { - if (logfile != stderr) - fclose(logfile); - return 1; + if (client_setup(do_daemonize)) { + retval = 1; + goto finish; } x11 = vdagent_x11_create(client, logfile, verbose); if (!x11) { udscs_destroy_connection(&client); - if (logfile != stderr) - fclose(logfile); - return 1; + retval = 1; + goto finish; } while (client && !quit) { @@ -212,6 +221,8 @@ int main(int argc, char *argv[]) vdagent_x11_destroy(x11); udscs_destroy_connection(&client); + +finish: if (logfile != stderr) fclose(logfile); |