diff options
author | Victor Toso <victortoso@redhat.com> | 2021-12-20 19:09:37 +0100 |
---|---|---|
committer | Victor Toso <victortoso@redhat.com> | 2021-12-20 19:09:48 +0100 |
commit | 09de02fd5cb12fcda3326e243981750c5358b7b6 (patch) | |
tree | fba8f962b1ed4e2e443dde2ceb98cfb6881cfffe | |
parent | 1aa2c06015e15f707ba9f874d5a5ea49fd450745 (diff) |
udscs: udscs_connect: return error to caller
This way we can have the log in one place and avoid flooding the journal.
Signed-off-by: Victor Toso <victortoso@redhat.com>
-rw-r--r-- | src/udscs.c | 10 | ||||
-rw-r--r-- | src/udscs.h | 5 | ||||
-rw-r--r-- | src/vdagent/vdagent.c | 12 |
3 files changed, 17 insertions, 10 deletions
diff --git a/src/udscs.c b/src/udscs.c index 3df67b3..6c50f76 100644 --- a/src/udscs.c +++ b/src/udscs.c @@ -107,16 +107,14 @@ static void udscs_connection_class_init(UdscsConnectionClass *klass) UdscsConnection *udscs_connect(const char *socketname, udscs_read_callback read_callback, VDAgentConnErrorCb error_cb, - int debug) + int debug, + GError **err) { GIOStream *io_stream; UdscsConnection *conn; - GError *err = NULL; - io_stream = vdagent_socket_connect(socketname, &err); - if (err) { - syslog(LOG_ERR, "%s: %s", __func__, err->message); - g_error_free(err); + io_stream = vdagent_socket_connect(socketname, err); + if (*err) { return NULL; } diff --git a/src/udscs.h b/src/udscs.h index 4f7ea36..0d4197b 100644 --- a/src/udscs.h +++ b/src/udscs.h @@ -53,11 +53,14 @@ typedef void (*udscs_read_callback)(UdscsConnection *conn, * * If debug is true then the events on this connection will be traced. * This includes the incoming and outgoing message names. + * + * In case of failure, returns NULL and set @err with reason. */ UdscsConnection *udscs_connect(const char *socketname, udscs_read_callback read_callback, VDAgentConnErrorCb error_cb, - int debug); + int debug, + GError **err); /* Queue a message for delivery to the client connected through conn. */ diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c index 0d3945e..05d1a8f 100644 --- a/src/vdagent/vdagent.c +++ b/src/vdagent/vdagent.c @@ -376,22 +376,28 @@ static void vdagent_destroy(VDAgent *agent) static gboolean vdagent_init_async_cb(gpointer user_data) { VDAgent *agent = user_data; + GError *err = NULL; agent->conn = udscs_connect(vdagentd_socket, - daemon_read_complete, daemon_error_cb, - debug); + daemon_read_complete, + daemon_error_cb, + debug, + &err); if (agent->conn == NULL) { if (agent->udscs_num_retry == MAX_RETRY_CONNECT_SYSTEM_AGENT) { syslog(LOG_WARNING, "Failed to connect to spice-vdagentd at %s (tried %d times)", vdagentd_socket, agent->udscs_num_retry); + g_error_free(err); goto err_init; } if (agent->udscs_num_retry == 0) { /* Log only when it fails and at the end */ syslog(LOG_DEBUG, - "Failed to connect with spice-vdagentd. Trying again in 1s"); + "Failed to connect with spice-vdagentd due '%s'. Trying again in 1s", + err->message); } + g_error_free(err); agent->udscs_num_retry++; g_timeout_add_seconds(1, vdagent_init_async_cb, agent); return G_SOURCE_REMOVE; |