]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add mail_storage_service_get_global()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 10 Jun 2019 14:27:29 +0000 (17:27 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 19 Jun 2019 10:14:14 +0000 (10:14 +0000)
This allows accessing the global mail storage service. Normally there is
only a single service created for the process at a time, so this allows
accessing it.

src/lib-storage/mail-storage-service.c
src/lib-storage/mail-storage-service.h

index fd4dfcc9ae396f75a56cc771e4bfe2b2c7828aac..658d11ac0f02143acee162be8fba2924f18e1e1d 100644 (file)
@@ -94,6 +94,7 @@ struct mail_storage_service_user {
 };
 
 struct module *mail_storage_service_modules = NULL;
+static struct mail_storage_service_ctx *storage_service_global = NULL;
 
 static int
 mail_storage_service_var_expand(struct mail_storage_service_ctx *ctx,
@@ -991,6 +992,8 @@ mail_storage_service_init(struct master_service *service,
                master_service_init_log(service, ctx->default_log_prefix);
        }
        dict_drivers_register_builtin();
+       if (storage_service_global == NULL)
+               storage_service_global = ctx;
        return ctx;
 }
 
@@ -1725,6 +1728,9 @@ void mail_storage_service_deinit(struct mail_storage_service_ctx **_ctx)
        }
        if (ctx->set_cache != NULL)
                master_service_settings_cache_deinit(&ctx->set_cache);
+
+       if (storage_service_global == ctx)
+               storage_service_global = NULL;
        pool_unref(&ctx->pool);
 
        module_dir_unload(&mail_storage_service_modules);
@@ -1732,6 +1738,11 @@ void mail_storage_service_deinit(struct mail_storage_service_ctx **_ctx)
        dict_drivers_unregister_builtin();
 }
 
+struct mail_storage_service_ctx *mail_storage_service_get_global(void)
+{
+       return storage_service_global;
+}
+
 void **mail_storage_service_user_get_set(struct mail_storage_service_user *user)
 {
        return master_service_settings_parser_get_others(master_service,
index 8861d6839e802a83324fb4c906b9860c6d905827..0fa430b7da96b87ae9550b79c9d5cd4444a542bf 100644 (file)
@@ -136,6 +136,9 @@ void mail_storage_service_all_init_mask(struct mail_storage_service_ctx *ctx,
 int mail_storage_service_all_next(struct mail_storage_service_ctx *ctx,
                                  const char **username_r);
 void mail_storage_service_deinit(struct mail_storage_service_ctx **ctx);
+/* Returns the first created service context. If it gets freed, NULL is
+   returned until the next time mail_storage_service_init() is called. */
+struct mail_storage_service_ctx *mail_storage_service_get_global(void);
 
 /* Activate user context. Normally this is called automatically by the ioloop,
    but e.g. during loops at deinit where all users are being destroyed, it's