tag = i_new(struct mail_tag, 1);
tag->name = i_strdup(tag_name);
i_array_init(&tag->vhosts, 16*VHOST_MULTIPLIER);
- tag->users = user_directory_init(list->user_expire_secs,
+ tag->users = user_directory_init(list->dir,
+ list->user_expire_secs,
list->user_free_hook);
array_push_back(&list->tags, &tag);
}
unsigned int i;
test_begin("user directory ascending");
- dir = user_directory_init(USER_DIR_TIMEOUT, NULL);
+ dir = user_directory_init(NULL, USER_DIR_TIMEOUT, NULL);
(void)user_directory_add(dir, 1, host, ioloop_time + count+1);
for (i = 0; i < count; i++)
unsigned int i;
test_begin("user directory descending");
- dir = user_directory_init(USER_DIR_TIMEOUT, NULL);
+ dir = user_directory_init(NULL, USER_DIR_TIMEOUT, NULL);
for (i = 0; i < count; i++)
(void)user_directory_add(dir, i+1, host, ioloop_time - i);
unsigned int i, count = i_rand_minmax(10000, 19999);
test_begin("user directory random");
- dir = user_directory_init(USER_DIR_TIMEOUT, NULL);
+ dir = user_directory_init(NULL, USER_DIR_TIMEOUT, NULL);
for (i = 0; i < count; i++) {
if (i_rand_limit(10) == 0)
timestamp = ioloop_time;
};
struct user_directory {
+ struct director *director;
+
/* unsigned int username_hash => user */
HASH_TABLE(void *, struct user *) hash;
/* sorted by time. may be unsorted while handshakes are going on. */
}
struct user_directory *
-user_directory_init(unsigned int timeout_secs,
+user_directory_init(struct director *director, unsigned int timeout_secs,
user_free_hook_t *user_free_hook)
{
struct user_directory *dir;
i_assert(timeout_secs > USER_NEAR_EXPIRING_MIN);
dir = i_new(struct user_directory, 1);
+ dir->director = director;
dir->timeout_secs = timeout_secs;
dir->user_near_expiring_secs =
timeout_secs * USER_NEAR_EXPIRING_PERCENTAGE / 100;
#ifndef USER_DIRECTORY_H
#define USER_DIRECTORY_H
+struct director;
+
#define USER_IS_BEING_KILLED(user) \
((user)->kill_ctx != NULL)
/* Create a new directory. Users are dropped if their time gets older
than timeout_secs. */
struct user_directory *
-user_directory_init(unsigned int timeout_secs,
+user_directory_init(struct director *director, unsigned int timeout_secs,
user_free_hook_t *user_free_hook);
void user_directory_deinit(struct user_directory **dir);