提交 1def743e 编写于 作者: D Dmitry Kozlov

radius: delete timeout timer if request sending fails (fixes double server release)

上级 2cdd6778
...@@ -124,13 +124,8 @@ static int __rad_req_send(struct rad_req_t *req) ...@@ -124,13 +124,8 @@ static int __rad_req_send(struct rad_req_t *req)
{ {
while (1) { while (1) {
if (rad_server_req_enter(req)) { if (rad_server_req_enter(req)) {
if (rad_server_realloc(req)) { if (rad_server_realloc(req))
if (conf_acct_timeout) {
log_ppp_warn("radius:acct: no servers available, terminating session...\n");
ap_session_terminate(req->rpd->ses, TERM_NAS_ERROR, 0);
}
return -1; return -1;
}
continue; continue;
} }
...@@ -177,11 +172,13 @@ static void rad_acct_timeout(struct triton_timer_t *t) ...@@ -177,11 +172,13 @@ static void rad_acct_timeout(struct triton_timer_t *t)
rad_server_fail(req->serv); rad_server_fail(req->serv);
if (rad_server_realloc(req)) { if (rad_server_realloc(req)) {
log_ppp_warn("radius:acct: no servers available, terminating session...\n"); log_ppp_warn("radius:acct: no servers available, terminating session...\n");
triton_timer_del(t);
ap_session_terminate(req->rpd->ses, TERM_NAS_ERROR, 0); ap_session_terminate(req->rpd->ses, TERM_NAS_ERROR, 0);
return; return;
} }
time(&req->rpd->acct_timestamp); time(&req->rpd->acct_timestamp);
} }
if (dt > conf_acct_timeout / 2) { if (dt > conf_acct_timeout / 2) {
req->timeout.period += 1000; req->timeout.period += 1000;
triton_timer_mod(&req->timeout, 0); triton_timer_mod(&req->timeout, 0);
...@@ -198,8 +195,16 @@ static void rad_acct_timeout(struct triton_timer_t *t) ...@@ -198,8 +195,16 @@ static void rad_acct_timeout(struct triton_timer_t *t)
req_set_RA(req, req->serv->secret); req_set_RA(req, req->serv->secret);
} }
if (__rad_req_send(req)) if (__rad_req_send(req)) {
triton_timer_del(t);
if (conf_acct_timeout) {
log_ppp_warn("radius:acct: no servers available, terminating session...\n");
ap_session_terminate(req->rpd->ses, TERM_NAS_ERROR, 0);
}
return; return;
}
__sync_add_and_fetch(&req->serv->stat_interim_sent, 1); __sync_add_and_fetch(&req->serv->stat_interim_sent, 1);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册