changeset 21346:9827c9f165a9

replication plugin: Error handling code cleanup The old code happened to work in all cases, but it was more of an accident.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 21 Dec 2016 21:33:35 +0200
parents 85958212120e
children 3ceea78a5cc8
files src/plugins/replication/replication-plugin.c
diffstat 1 files changed, 3 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/replication/replication-plugin.c	Wed Dec 21 19:50:10 2016 +0200
+++ b/src/plugins/replication/replication-plugin.c	Wed Dec 21 21:33:35 2016 +0200
@@ -126,6 +126,7 @@
 	char buf[1024];
 	int fd;
 	ssize_t ret;
+	bool success = FALSE;
 
 	fd = net_connect_unix(ruser->socket_path);
 	if (fd == -1) {
@@ -141,7 +142,6 @@
 	alarm(ruser->sync_secs);
 	if (write_full(fd, str_data(str), str_len(str)) < 0) {
 		i_error("write(%s) failed: %m", ruser->socket_path);
-		ret = -1;
 	} else {
 		/* + | - */
 		ret = read(fd, buf, sizeof(buf));
@@ -156,17 +156,14 @@
 			}
 		} else if (ret == 0) {
 			i_error("read(%s) failed: EOF", ruser->socket_path);
-			ret = -1;
 		} else if (buf[0] == '+') {
 			/* success */
-			ret = 0;
+			success = TRUE;
 		} else if (buf[0] == '-') {
 			/* failure */
 			if (buf[ret-1] == '\n') ret--;
 			i_warning("replication(%s): Sync failure: %s",
 				  user->username, t_strndup(buf+1, ret-1));
-			ret = -1;
-		} else {
 			i_warning("replication(%s): "
 				  "Remote sent invalid input: %s",
 				  user->username, t_strndup(buf, ret));
@@ -175,7 +172,7 @@
 	alarm(0);
 	if (close(fd) < 0)
 		i_error("close(%s) failed: %m", ruser->socket_path);
-	return ret;
+	return success ? 0 : -1;
 }
 
 static void replication_notify(struct mail_namespace *ns,