summaryrefslogtreecommitdiff
path: root/accel-pppd/session.c
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2015-11-18 12:47:27 +0300
committerDmitry Kozlov <xeb@mail.ru>2015-11-18 12:47:27 +0300
commitdd6a897125a984498536466174426b18ed870bcc (patch)
tree5ad33fc1bb4f24a591f575b0a99ac0e988846eb3 /accel-pppd/session.c
parentcc773ecd1776610e8789e72415cb48d2d203712b (diff)
downloadaccel-ppp-dd6a897125a984498536466174426b18ed870bcc.tar.gz
accel-ppp-dd6a897125a984498536466174426b18ed870bcc.zip
ipoe: do not send immediate Accounting Stop in soft terminate mode
Diffstat (limited to 'accel-pppd/session.c')
-rw-r--r--accel-pppd/session.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/accel-pppd/session.c b/accel-pppd/session.c
index da18e43..247c0d7 100644
--- a/accel-pppd/session.c
+++ b/accel-pppd/session.c
@@ -173,6 +173,13 @@ void __export ap_session_finished(struct ap_session *ses)
{
ses->terminated = 1;
+ if (!ses->down) {
+ ap_session_ifdown(ses);
+ ap_session_read_stats(ses, NULL);
+
+ triton_event_fire(EV_SES_FINISHING, ses);
+ }
+
triton_event_fire(EV_SES_PRE_FINISHED, ses);
pthread_rwlock_wrlock(&ses_lock);
@@ -275,12 +282,14 @@ void __export ap_session_terminate(struct ap_session *ses, int cause, int hard)
log_ppp_debug("terminate\n");
- ap_session_ifdown(ses);
- ap_session_read_stats(ses, NULL);
+ if (ses->ctrl->terminate(ses, hard)) {
+ ap_session_ifdown(ses);
+ ap_session_read_stats(ses, NULL);
- triton_event_fire(EV_SES_FINISHING, ses);
+ triton_event_fire(EV_SES_FINISHING, ses);
- ses->ctrl->terminate(ses, hard);
+ ses->down = 1;
+ }
}
void ap_shutdown_soft(void (*cb)(void))