summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2011-05-20 03:03:05 +0200
committerHans de Goede <hdegoede@redhat.com>2011-07-15 10:21:28 +0200
commit5814222821a5e41e610633b73d6e739be7c4cbad (patch)
treec624d5213827a3ecbc89b8be26de98ee223a3e39
parent0fca86d2dd18e41630ebbca444a696de458a69bd (diff)
Attempt to reconnect to system socket every second when daemonized
https://bugzilla.redhat.com/show_bug.cgi?id=681797
-rw-r--r--src/udscs.c6
-rw-r--r--src/vdagent.c31
2 files changed, 25 insertions, 12 deletions
diff --git a/src/udscs.c b/src/udscs.c
index c451855..6f1328e 100644
--- a/src/udscs.c
+++ b/src/udscs.c
@@ -182,8 +182,10 @@ struct udscs_connection *udscs_connect(const char *socketname,
snprintf(address.sun_path, sizeof(address.sun_path), "%s", socketname);
c = connect(conn->fd, (struct sockaddr *)&address, sizeof(address));
if (c != 0) {
- fprintf(conn->errfile, "connect %s: %s\n", socketname,
- strerror(errno));
+ if (conn->logfile) {
+ fprintf(conn->logfile, "connect %s: %s\n", socketname,
+ strerror(errno));
+ }
free(conn);
return NULL;
}
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);