[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