MINOR: acme: register the task in the ckch_store
This patch registers the task in the ckch_store so we don't run 2 tasks at the same time for a given certificate. Move the task creation under the lock and check if there was already a task under the lock.
This commit is contained in:
parent
115653bfc8
commit
e778049ffc
@ -87,6 +87,7 @@ struct ckch_store {
|
||||
struct list ckch_inst; /* list of ckch_inst which uses this ckch_node */
|
||||
struct list crtlist_entry; /* list of entries which use this store */
|
||||
struct ckch_conf conf;
|
||||
struct task *acme_task;
|
||||
struct ebmb_node node;
|
||||
char path[VAR_ARRAY];
|
||||
};
|
||||
|
24
src/acme.c
24
src/acme.c
@ -1789,6 +1789,11 @@ static int cli_acme_renew_parse(char **args, char *payload, struct appctx *appct
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (store->acme_task != NULL) {
|
||||
memprintf(&err, "An ACME task is already running for certificate '%s'.\n", args[2]);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (store->conf.acme.id == NULL) {
|
||||
memprintf(&err, "No ACME configuration defined for file '%s'.\n", args[2]);
|
||||
goto err;
|
||||
@ -1806,6 +1811,18 @@ static int cli_acme_renew_parse(char **args, char *payload, struct appctx *appct
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
||||
task = task_new_anywhere();
|
||||
if (!task)
|
||||
goto err;
|
||||
task->nice = 0;
|
||||
task->process = acme_process;
|
||||
|
||||
/* register the task in the store so we don't
|
||||
* have 2 tasks at the same time
|
||||
*/
|
||||
store->acme_task = task;
|
||||
|
||||
HA_SPIN_UNLOCK(CKCH_LOCK, &ckch_lock);
|
||||
|
||||
ctx = calloc(1, sizeof *ctx);
|
||||
@ -1855,15 +1872,8 @@ static int cli_acme_renew_parse(char **args, char *payload, struct appctx *appct
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
||||
ctx->store = newstore;
|
||||
ctx->cfg = cfg;
|
||||
|
||||
task = task_new_anywhere();
|
||||
if (!task)
|
||||
goto err;
|
||||
task->nice = 0;
|
||||
task->process = acme_process;
|
||||
task->context = ctx;
|
||||
|
||||
task_wakeup(task, TASK_WOKEN_INIT);
|
||||
|
Loading…
x
Reference in New Issue
Block a user