diff options
Diffstat (limited to 'accel-pppd/session.c')
-rw-r--r-- | accel-pppd/session.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/accel-pppd/session.c b/accel-pppd/session.c index da18e434..247c0d77 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)) |