dovecot-2.2: lib-master: Moved connection accepting code to its ...

dovecot at dovecot.org dovecot at dovecot.org
Tue Aug 18 18:02:02 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/b9ccd6349654
changeset: 18948:b9ccd6349654
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Aug 18 20:03:28 2015 +0300
description:
lib-master: Moved connection accepting code to its own functions.
No functional changes.

diffstat:

 src/lib-master/master-service-private.h |   5 +++
 src/lib-master/master-service.c         |  55 +++++++++++++++++++-------------
 2 files changed, 38 insertions(+), 22 deletions(-)

diffs (85 lines):

diff -r 41fabc9aa4c7 -r b9ccd6349654 src/lib-master/master-service-private.h
--- a/src/lib-master/master-service-private.h	Mon Aug 17 19:31:42 2015 +0300
+++ b/src/lib-master/master-service-private.h	Tue Aug 18 20:03:28 2015 +0300
@@ -83,4 +83,9 @@
 void master_service_io_listeners_remove(struct master_service *service);
 void master_service_ssl_io_listeners_remove(struct master_service *service);
 
+void master_service_client_connection_handled(struct master_service *service,
+					      struct master_service_connection *conn);
+void master_service_client_connection_callback(struct master_service *service,
+					       struct master_service_connection *conn);
+
 #endif
diff -r 41fabc9aa4c7 -r b9ccd6349654 src/lib-master/master-service.c
--- a/src/lib-master/master-service.c	Mon Aug 17 19:31:42 2015 +0300
+++ b/src/lib-master/master-service.c	Tue Aug 18 20:03:28 2015 +0300
@@ -680,6 +680,38 @@
 	master_status_update(service);
 }
 
+void master_service_client_connection_handled(struct master_service *service,
+					      struct master_service_connection *conn)
+{
+	if (!conn->accepted) {
+		if (close(conn->fd) < 0)
+			i_error("close(service connection) failed: %m");
+		master_service_client_connection_destroyed(service);
+	} else if (conn->fifo) {
+		/* reading FIFOs stays open forever, don't count them
+		   as real clients */
+		master_service_client_connection_destroyed(service);
+	}
+	if (service->master_status.available_count == 0 &&
+	    service->service_count_left == 1) {
+		/* we're not going to accept any more connections after this.
+		   go ahead and close the connection early. don't do this
+		   before calling callback, because it may want to access
+		   the listen_fd (e.g. to check socket permissions). */
+		i_assert(service->listeners != NULL);
+		master_service_io_listeners_remove(service);
+		master_service_io_listeners_close(service);
+	}
+}
+
+void master_service_client_connection_callback(struct master_service *service,
+					       struct master_service_connection *conn)
+{
+	service->callback(conn);
+
+	master_service_client_connection_handled(service, conn);
+}
+
 void master_service_client_connection_accept(struct master_service_connection *conn)
 {
 	conn->accepted = TRUE;
@@ -870,28 +902,7 @@
 	net_set_nonblock(conn.fd, TRUE);
 
 	master_service_client_connection_created(service);
-
-	service->callback(&conn);
-
-	if (!conn.accepted) {
-		if (close(conn.fd) < 0)
-			i_error("close(service connection) failed: %m");
-		master_service_client_connection_destroyed(service);
-	} else if (conn.fifo) {
-		/* reading FIFOs stays open forever, don't count them
-		   as real clients */
-		master_service_client_connection_destroyed(service);
-	}
-	if (service->master_status.available_count == 0 &&
-	    service->service_count_left == 1) {
-		/* we're not going to accept any more connections after this.
-		   go ahead and close the connection early. don't do this
-		   before calling callback, because it may want to access
-		   the listen_fd (e.g. to check socket permissions). */
-		i_assert(service->listeners != NULL);
-		master_service_io_listeners_remove(service);
-		master_service_io_listeners_close(service);
-	}
+	master_service_client_connection_callback(service, &conn);
 }
 
 static void io_listeners_init(struct master_service *service)


More information about the dovecot-cvs mailing list