MINOR: acme: does not leave task for next request
The next request was always leaving the task befor initializing the httpclient. This patch optimize it by jumping to the next step at the end of the current one. This way, only the httpclient is doing a task_wakeup() to handle the response. But transiting from response to the next request does not leave the task.
This commit is contained in:
parent
51f9415d5e
commit
6626011720
39
src/acme.c
39
src/acme.c
@ -1748,6 +1748,8 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
char *errmsg = NULL;
|
||||
struct mt_list tmp = MT_LIST_LOCK_FULL(&ctx->el);
|
||||
|
||||
re:
|
||||
|
||||
switch (st) {
|
||||
case ACME_RESSOURCES:
|
||||
if (http_st == ACME_HTTP_REQ) {
|
||||
@ -1760,8 +1762,7 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
goto retry;
|
||||
}
|
||||
st = ACME_NEWNONCE;
|
||||
http_st = ACME_HTTP_REQ;
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_NEWNONCE:
|
||||
@ -1774,8 +1775,7 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
goto retry;
|
||||
}
|
||||
st = ACME_CHKACCOUNT;
|
||||
http_st = ACME_HTTP_REQ;
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
|
||||
break;
|
||||
@ -1792,8 +1792,7 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
st = ACME_NEWACCOUNT;
|
||||
else
|
||||
st = ACME_NEWORDER;
|
||||
http_st = ACME_HTTP_REQ;
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_NEWACCOUNT:
|
||||
@ -1806,8 +1805,7 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
goto retry;
|
||||
}
|
||||
st = ACME_NEWORDER;
|
||||
http_st = ACME_HTTP_REQ;
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
|
||||
|
||||
@ -1822,8 +1820,7 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
goto retry;
|
||||
}
|
||||
st = ACME_AUTH;
|
||||
http_st = ACME_HTTP_REQ;
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_AUTH:
|
||||
@ -1835,13 +1832,12 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
if (acme_res_auth(task, ctx, ctx->next_auth, &errmsg) != 0) {
|
||||
goto retry;
|
||||
}
|
||||
http_st = ACME_HTTP_REQ;
|
||||
if ((ctx->next_auth = ctx->next_auth->next) == NULL) {
|
||||
st = ACME_CHALLENGE;
|
||||
ctx->next_auth = ctx->auths;
|
||||
}
|
||||
/* call with next auth or do the challenge step */
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_CHALLENGE:
|
||||
@ -1857,13 +1853,12 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
} else if (ret == ACME_RET_FAIL) {
|
||||
goto end;
|
||||
}
|
||||
http_st = ACME_HTTP_REQ;
|
||||
if ((ctx->next_auth = ctx->next_auth->next) == NULL) {
|
||||
st = ACME_CHKCHALLENGE;
|
||||
ctx->next_auth = ctx->auths;
|
||||
}
|
||||
/* call with next auth or do the challenge step */
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_CHKCHALLENGE:
|
||||
@ -1878,12 +1873,11 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
} else if (ret == ACME_RET_FAIL) {
|
||||
goto abort;
|
||||
}
|
||||
http_st = ACME_HTTP_REQ;
|
||||
if ((ctx->next_auth = ctx->next_auth->next) == NULL)
|
||||
st = ACME_FINALIZE;
|
||||
|
||||
/* do it with the next auth or finalize */
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_FINALIZE:
|
||||
@ -1895,9 +1889,8 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
if (acme_res_finalize(task, ctx, &errmsg) != 0) {
|
||||
goto retry;
|
||||
}
|
||||
http_st = ACME_HTTP_REQ;
|
||||
st = ACME_CHKORDER;
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_CHKORDER:
|
||||
@ -1909,9 +1902,8 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
if (acme_res_chkorder(task, ctx, &errmsg) != 0) {
|
||||
goto retry;
|
||||
}
|
||||
http_st = ACME_HTTP_REQ;
|
||||
st = ACME_CERTIFICATE;
|
||||
task_wakeup(task, TASK_WOKEN_MSG);
|
||||
goto nextreq;
|
||||
}
|
||||
break;
|
||||
case ACME_CERTIFICATE:
|
||||
@ -1923,7 +1915,6 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
if (acme_res_certificate(task, ctx, &errmsg) != 0) {
|
||||
goto retry;
|
||||
}
|
||||
http_st = ACME_HTTP_REQ;
|
||||
goto end;
|
||||
}
|
||||
break;
|
||||
@ -1934,6 +1925,7 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
|
||||
}
|
||||
|
||||
/* this is called after initializing a request */
|
||||
MT_LIST_UNLOCK_FULL(&ctx->el, tmp);
|
||||
ctx->retries = ACME_RETRY;
|
||||
ctx->http_state = http_st;
|
||||
@ -1941,6 +1933,11 @@ struct task *acme_process(struct task *task, void *context, unsigned int state)
|
||||
task->expire = TICK_ETERNITY;
|
||||
return task;
|
||||
|
||||
nextreq:
|
||||
/* this is called when changing step in the state machine */
|
||||
http_st = ACME_HTTP_REQ;
|
||||
goto re; /* optimize by not leaving the task for the next httpreq to init */
|
||||
|
||||
retry:
|
||||
ctx->http_state = ACME_HTTP_REQ;
|
||||
ctx->state = st;
|
||||
|
Loading…
x
Reference in New Issue
Block a user