Continuation of
5ff9a8686a29c423e1fcf90f2d36af521cef6f7d. It didn't fix
a situation where there were passdb requests still pending, because
passdb deinit only unreferenced db-ldap and then freed passdb settings.
Only after userdb deinit unreferenced db-ldap again did it try to abort
the ldap requests, but now the passdb settings were already NULL.
}
}
- db_ldap_abort_requests(conn, UINT_MAX, 0, FALSE, "Shutting down");
i_assert(conn->pending_count == 0);
db_ldap_conn_close(conn);
i_assert(conn->to == NULL);
pool_unref(&conn->pool);
}
+void db_ldap_abort_all_requests(struct ldap_connection *conn)
+{
+ db_ldap_abort_requests(conn, UINT_MAX, 0, FALSE, "Shutting down");
+}
+
#ifndef BUILTIN_LDAP
/* Building a plugin */
extern struct passdb_module_interface passdb_ldap_plugin;
struct ldap_connection *db_ldap_init(struct event *event);
void db_ldap_unref(struct ldap_connection **conn);
+void db_ldap_abort_all_requests(struct ldap_connection *conn);
int db_ldap_connect(struct ldap_connection *conn);
void db_ldap_connect_delayed(struct ldap_connection *conn);
struct ldap_passdb_module *module =
container_of(_module, struct ldap_passdb_module, module);
+ db_ldap_abort_all_requests(module->conn);
db_ldap_unref(&module->conn);
}
struct ldap_userdb_module *module =
container_of(_module, struct ldap_userdb_module, module);
+ db_ldap_abort_all_requests(module->conn);
db_ldap_unref(&module->conn);
}