[dovecot-cvs] dovecot/src/auth auth-client-connection.c,1.4,1.5 db-ldap.c,1.19,1.20

cras at procontrol.fi cras at procontrol.fi
Wed Dec 3 02:40:23 EET 2003


Update of /home/cvs/dovecot/src/auth
In directory danu:/tmp/cvs-serv14047/auth

Modified Files:
	auth-client-connection.c db-ldap.c 
Log Message:
Changed hash_foreach() to iterator.



Index: auth-client-connection.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/auth-client-connection.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- auth-client-connection.c	22 Aug 2003 15:40:12 -0000	1.4
+++ auth-client-connection.c	3 Dec 2003 00:40:21 -0000	1.5
@@ -207,14 +207,6 @@
 	return conn;
 }
 
-static void auth_request_hash_destroy(void *key __attr_unused__, void *value,
-				      void *context __attr_unused__)
-{
-	struct auth_request *auth_request = value;
-
-	auth_request->conn = NULL;
-}
-
 void auth_client_connection_destroy(struct auth_client_connection *conn)
 {
 	struct auth_client_connection **pos;
@@ -244,10 +236,19 @@
 
 static void auth_client_connection_unref(struct auth_client_connection *conn)
 {
+	struct hash_iterate_context *iter;
+	void *key, *value;
+
 	if (--conn->refcount > 0)
 		return;
 
-	hash_foreach(conn->auth_requests, auth_request_hash_destroy, NULL);
+	iter = hash_iterate_init(conn->auth_requests);
+	while (hash_iterate(iter, &key, &value)) {
+		struct auth_request *auth_request = value;
+
+		auth_request->conn = NULL;
+	}
+	hash_iterate_deinit(iter);
 	hash_destroy(conn->auth_requests);
 
 	i_stream_unref(conn->input);
@@ -256,20 +257,32 @@
 	pool_unref(conn->pool);
 }
 
-static void auth_request_hash_timeout_check(void *key __attr_unused__,
-					    void *value, void *context)
+static void
+auth_client_connection_check_timeouts(struct auth_client_connection *conn)
 {
-	struct auth_client_connection *conn = context;
-	struct auth_request *auth_request = value;
+	struct hash_iterate_context *iter;
+	void *key, *value;
+	unsigned int secs;
+	int destroy = FALSE;
 
-	if (auth_request->created + AUTH_REQUEST_TIMEOUT < ioloop_time) {
-		i_warning("Login process has too old (%us) requests, "
-			  "killing it.",
-			  (unsigned int)(ioloop_time - auth_request->created));
+	iter = hash_iterate_init(conn->auth_requests);
+	while (hash_iterate(iter, &key, &value)) {
+		struct auth_request *auth_request = value;
 
-		auth_client_connection_destroy(conn);
-		hash_foreach_stop();
+		if (auth_request->created + AUTH_REQUEST_TIMEOUT < ioloop_time) {
+			secs = (unsigned int) (ioloop_time -
+					       auth_request->created);
+			i_warning("Login process has too old (%us) requests, "
+				  "killing it.", secs);
+
+			destroy = TRUE;
+			break;
+		}
 	}
+	hash_iterate_deinit(iter);
+
+	if (destroy)
+		auth_client_connection_destroy(conn);
 }
 
 static void request_timeout(void *context __attr_unused__)
@@ -279,11 +292,7 @@
 
 	for (conn = master->clients; conn != NULL; conn = next) {
 		next = conn->next;
-
-		conn->refcount++;
-		hash_foreach(conn->auth_requests,
-			     auth_request_hash_timeout_check, conn);
-		auth_client_connection_unref(conn);
+		auth_client_connection_check_timeouts(conn);
 	}
 }
 

Index: db-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/db-ldap.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- db-ldap.c	22 Aug 2003 05:06:53 -0000	1.19
+++ db-ldap.c	3 Dec 2003 00:40:21 -0000	1.20
@@ -226,19 +226,19 @@
 	return TRUE;
 }
 
-static void hash_ldap_request_destroy(void *key __attr_unused__,
-				      void *value, void *context)
+static void ldap_conn_close(struct ldap_connection *conn)
 {
-	struct ldap_request *request = value;
-	struct ldap_connection *conn = context;
+	struct hash_iterate_context *iter;
+	void *key, *value;
 
-	request->callback(conn, request, NULL);
-	i_free(request);
-}
+	iter = hash_iterate_init(conn->requests);
+	while (hash_iterate(iter, &key, &value)) {
+		struct ldap_request *request = value;
 
-static void ldap_conn_close(struct ldap_connection *conn)
-{
-	hash_foreach(conn->requests, hash_ldap_request_destroy, conn);
+		request->callback(conn, request, NULL);
+		i_free(request);
+	}
+	hash_iterate_deinit(iter);
 	hash_clear(conn->requests, FALSE);
 
 	conn->connected = FALSE;



More information about the dovecot-cvs mailing list